国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

對比scala,用javascript實現curried方法

tracymac7 / 960人閱讀

摘要:從語法上提供了方法,如在函數式和面向對象以及兩者的結合上都比走的更遠,而且語法上相當的精簡。但是也太靈活了,很多特性都和模擬出來。用對方法的實現代碼鏈接在中使用函數定義,和將匿名函數賦值給變量基本上沒有什么區別

scala從語法上提供了curried方法,如:

def add(x: Int, y: Int, z: Int) = x + y + z
val addCurried = (add _).curried
add(1, 2, 3) // => 6
addCurried(1)(2)(3) // => 6

val add2 = (x: Int, y: Int, z: Int) => x + y + z
val addCurried2 = add.curried
add(1, 2, 3) // => 6
addCurried(1)(2)(3) // => 6

scala 在函數式和面向對象以及兩者的結合上都比javascript走的更遠,而且語法上相當的精簡。
但是js也太靈活了,很多特性都和模擬出來。

用javascript 對 curried 方法的實現:
代碼鏈接:https://github.com/peichao01/test2/tree/master/javascript/curried

Function.prototype.curried = function(argsLength){
     var self = this, len = argsLength === undefined ? self.length : argsLength;
     if(len > 0){
          function curried (time, stack){
               return function(x){
                    stack[time] = x;
                    if(stack.length < len) {
                         return curried(time + 1, stack.concat());
                    } else {
                         return self.apply(self, stack);
                    }
               }
          }
          return curried(0, []);
     }
     else{
          return function(){
               return self.apply(self);
          }
     }
};

var adder = function(x, y, z){ // 在 javascript 中使用函數定義,和將匿名函數賦值給變量基本上沒有什么區別
    return x + y + z
}
var t = function(){}
var p = function (a) {
     return a + 1
}

// var a = adder.curried();
// var a1 = a(1)(2)(3);

var aa = adder.curried();
var aa1 = aa(1);
var aa2 = aa1(2);
var aa3 = aa2(3);
console.log(aa3);
console.log(aa1(-10)(23));

var ab2 = aa1(5);
var ab3 = ab2(6);
console.log(ab3);

console.log(aa(3)(5)(10));
console.log(aa(25)(50)(12));
console.log(aa1(-10)(23));

var t1 = t.curried();

var p1 = p.curried();
var p2 = p1(2);

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78053.html

相關文章

  • SegmentFault 技術周刊 Vol.16 - 淺入淺出 JavaScript 函數式編程

    摘要:函數式編程,一看這個詞,簡直就是學院派的典范。所以這期周刊,我們就重點引入的函數式編程,淺入淺出,一窺函數式編程的思想,可能讓你對編程語言的理解更加融會貫通一些。但從根本上來說,函數式編程就是關于如使用通用的可復用函數進行組合編程。 showImg(https://segmentfault.com/img/bVGQuc); 函數式編程(Functional Programming),一...

    csRyan 評論0 收藏0
  • JavaScript也玩私人訂制——玩轉函數柯里化

    摘要:而柯里化是一個屬于函數式編程的一個常見的技巧。簡單來說,函數柯里化就是對高階函數的降階處理。讓你意外的是,這就是柯里化的基本思想,簡單地讓人猝不及防。 函數式編程是一種被部分JavaScript程序員推崇的編程風格,更別說 Haskell 和 Scala 這種以函數式為教義的語言。原因是因為其能用較短的代碼實現功能,如果掌握得當,能達到代碼文檔化(代碼本身具有很高可讀性甚至可以代替文檔...

    MRZYD 評論0 收藏0
  • 函數式編程與面向對象編程[1]: Lambda表達式 函數柯里化 高階函數

    摘要:函數式編程與面向對象編程表達式函數柯里化高階函數之劍什么是表達式例子定義表達式是一個匿名函數,表達式基于數學中的演算得名,直接對應于其中的抽象,是一個匿名函數,即沒有函數名的函數。 函數式編程與面向對象編程[1]: Lambda表達式 函數柯里化 高階函數.md 之劍 2016.5.2 11:19:09 什么是lambda表達式 例子 For example, in Lisp the...

    張金寶 評論0 收藏0
  • 對比scalajavascript實現 特質(trait) 的部分特性

    摘要:特質是的一個重要的特性,主要的使用方式有兩個方面拓寬瘦接口為胖接口。定義可堆疊的改變。相對于多重繼承而言最靈活的一方面就是所指定的對象只有到被混入之后才能確定。 特質(trait)是scala的一個重要的特性,主要的使用方式有兩個方面:1.拓寬瘦接口為胖接口。2.定義可堆疊的改變。 trait相對于多重繼承而言最靈活的一方面就是super所指定的對象只有到被混入之后才能確定。 因為特質...

    cocopeak 評論0 收藏0
  • vavr:讓你像寫Scala一樣寫Java

    摘要:是在嘗試讓擁有跟類似的語法。在中使用,需要顯示得將集合轉成的步驟,而在中則免去了這樣的步驟。中的語句只能針對常量起作用,而使用模式匹配則可以對另一個函數的返回結果起作用,功能非常搶到。 Hystrix是Netflix開源的限流、熔斷降級組件,去年發現Hystrix已經不再更新了,而在github主頁上將我引導到了另一個替代項目——resilience4j,這個項目是基于Java 8開發...

    andycall 評論0 收藏0

發表評論

0條評論

tracymac7

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<