[英]CoffeeScript curiousity about splat & this implementation
因此,通過功能性和可循環性查看一些代碼作為驅動程序。.我看到了splat用法的這種約定,盡管我可以“看到”它在已編譯的javascript中的作用,但我沒有看到任何對此的提及是文檔等。在該行末尾的coffeescript的“ ...” splat用法上(見下文)。
例如,我們有:
flip = (f) -> (as...) -> f as.reverse()...
編譯為:
flip = function(f) {
return function() {
var as;
as = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return f.apply(null, as.reverse());
};
};
現在,我了解到“ as ...”被用作:
as = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
接受參數並將其分配給“ as”。
但是,我沒有把頭纏在這里的用法是:
-> f as.reverse()... # <-- the "..." at the end.
如果我刪除它(“ ...”),那么已編譯的“應用”將消失。因此,最后使用“ ...”的慣例是什么。 我的咖啡腳本知識中缺少這個概念。
有沒有什么特別的...
是在該行的末尾。
您在這里看到的是splat參數和splat參數之間的區別。 這兩種情況都使用...
運算符,因為它們是相關的。 但是,這可能會造成混淆,因為這些用法是彼此相反的。
as.reverse()...
是傳遞給f
的splat參數。 編譯后的JavaScript使用f.apply
將as.reverse()
分解為接收方f
多個參數。
as...
是splat參數。 編譯后的JavaScript使用__slice
將arguments
對象轉換為接收器內部的數組,以將參數收集到單個列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.