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ử)
Helpex - Trao Đổi & Giúp Đỡ - là một trang web tổng hợp, chia sẻ kiến thức và hỏi đáp dành cho các lĩnh vực ở mọi cấp độ và các chuyên gia trong các lĩnh vực liên quan. Chỉ mất một phút để đăng ký.
Tham gia cộng đồngNhì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ử)
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, rest
sẽ 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.
khi bạn không chắc chắn về số lượng thông số mà bạn muốn chấp nhận.
– Hoàng Minh Hoàng 07:58:41 31/12/2013Về mặt kỹ thuật được gọi là [hàm matrixdic] ( en.wikipedia.org/wiki/Variadic_feft ), hoặc một hàm của "arity" không xác định. Hầu hết các ngôn ngữ sử dụng một hình thức elip của một số loại để chỉ ra các đối số biến.
– Võ Khánh Chi 17:47:51 26/03/2015@JeffScottWard một ví dụ hoàn hảo là console.log, nó chấp nhận bất kỳ số lượng đối số nào. console.log('this:',variable,'should be replaced with', another_variable);
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]
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).
Xem thêm: Python's * args và ** kwargs và tham số phần còn lại của ActionScript 3.
– Lê Thế Phúc 13:19:46 01/06/2011Tô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 .
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...) ->
, rest
sẽ không chứa x
, arguments
không.
Và như thường lệ, bạn cũng nên biết cách triển khai trong vanilla Js:
– Hoàng Khai Minh 07:22:00 22/10/2014arguments
+call
: stackoverflow.com/questions/17380315/Tôi thích nghĩ về nó như là một tham số được "văng" (như sơn) thành một sự liên tục không xác định
– Hoàng Hạnh My 11:48:35 14/11/2014Đối với bất cứ ai Python-nghiêng: đây là bạn
– Tạ Hiệp Hiền 09:10:40 29/03/2015*args
trongdef foo(*args):
.Thuật ngữ lưu ý: ES6 thông qua cú pháp tiền tố tương tự. Trong ES6 nhận
– Bùi Như Phương 14:10:52 08/08/2018, ...args
được đặt tên các tham số phần còn lại và mở rộng...args
thành một hàm gọi / mảng / đối tượng theo nghĩa đen được đặt tên là lây lan