簡體   English   中英

CoffeeScript對splat和此實現的好奇心

[英]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.applyas.reverse()分解為接收方f多個參數。

as...是splat參數。 編譯后的JavaScript使用__slicearguments對象轉換為接收器內部的數組,以將參數收集到單個列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM