112

Nhìn vào hướng dẫn CoffeeScript này: http://jashkenas.github.com/coffee-script/

Tôi hoàn toàn không thấy Splats dùng để làm gì. Công trình này là gì? Nó đến từ đâu (trong lịch sử)

|
197

Thuật ngữ "toán tử splat" xuất phát từ Ruby, trong đó *ký tự (đôi khi được gọi là "splat" có thể sử dụng mục Jargon File ) để chỉ ra rằng một mục trong danh sách đối số sẽ "ngấm" một danh sách các đối số.

CoffeeScript thông qua các sọc Ruby-phong cách rất sớm (xem vấn đề 16 ), nhưng theo gợi ý của Douglas Crockford, cú pháp được thay đổi từ *xđến x...một vài tuần sau đó (xem vấn đề 45 ). Tuy nhiên, CoffeeScripters vẫn gọi cú pháp là "toán tử splat" hoặc "toán tử splat."

Đối với những gì họ thực sự làm, splat cắt argumentsđối tượng theo cách mà đối số được tách ra trở thành một mảng của tất cả các đối số "phụ". Ví dụ tầm thường nhất là

(args...) ->

Trong trường hợp này, argsđơn giản sẽ là một bản sao của arguments. Đối số được phân tách có thể đến trước, sau hoặc giữa các đối số chuẩn:

(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->

Trong hai trường hợp đầu tiên, nếu hàm nhận được các đối số 0-1, restsẽ là một mảng trống. Trong trường hợp cuối cùng, hàm cần nhận được nhiều hơn 2 đối số restđể không trống.

Vì JavaScript không cho phép nhiều chữ ký cho các hàm có cùng tên (cách C và Java thực hiện), nên các biểu tượng là một trình tiết kiệm thời gian rất lớn để xử lý các số lượng đối số khác nhau.

|
13

nếu bạn biết python, args...gần tương tự *args, vì nó cho phép bạn coi các tham số hàm là danh sách

ví dụ:

concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'

nó cũng hoạt động trong các giả định:

[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]
|
6

Splats là thuật ngữ để sử dụng ...toán tử cho var-args (các hàm có số lượng đối số thay đổi).

|
3

Tôi nghĩ rằng nó là một đường cú pháp cho đối tượng đối số của javascript.

Ý tưởng có thể đến từ nhà điều hành splat* ruby .

|
  • 1

    về mặt kỹ thuật, nó nhiều hơn một chút, vì nó có thể được sử dụng bên trái trong các bài tập và có thể được kết hợp với các đối số được đặt tên: trong (x, rest...) ->, restsẽ không chứa x, argumentskhông.

    – Tạ Ngọc Anh 19:52:39 11/01/2014

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.