成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對(duì)比scala,用javascript實(shí)現(xiàn)curried方法

tracymac7 / 972人閱讀

摘要:從語(yǔ)法上提供了方法,如在函數(shù)式和面向?qū)ο笠约皟烧叩慕Y(jié)合上都比走的更遠(yuǎn),而且語(yǔ)法上相當(dāng)?shù)木?jiǎn)。但是也太靈活了,很多特性都和模擬出來(lái)。用對(duì)方法的實(shí)現(xiàn)代碼鏈接在中使用函數(shù)定義,和將匿名函數(shù)賦值給變量基本上沒(méi)有什么區(qū)別

scala從語(yǔ)法上提供了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 在函數(shù)式和面向?qū)ο笠约皟烧叩慕Y(jié)合上都比javascript走的更遠(yuǎn),而且語(yǔ)法上相當(dāng)?shù)木?jiǎn)。
但是js也太靈活了,很多特性都和模擬出來(lái)。

用javascript 對(duì) curried 方法的實(shí)現(xiàn):
代碼鏈接: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 中使用函數(shù)定義,和將匿名函數(shù)賦值給變量基本上沒(méi)有什么區(qū)別
    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);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78053.html

相關(guān)文章

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

    摘要:函數(shù)式編程,一看這個(gè)詞,簡(jiǎn)直就是學(xué)院派的典范。所以這期周刊,我們就重點(diǎn)引入的函數(shù)式編程,淺入淺出,一窺函數(shù)式編程的思想,可能讓你對(duì)編程語(yǔ)言的理解更加融會(huì)貫通一些。但從根本上來(lái)說(shuō),函數(shù)式編程就是關(guān)于如使用通用的可復(fù)用函數(shù)進(jìn)行組合編程。 showImg(https://segmentfault.com/img/bVGQuc); 函數(shù)式編程(Functional Programming),一...

    csRyan 評(píng)論0 收藏0
  • JavaScript也玩私人訂制——玩轉(zhuǎn)函數(shù)柯里化

    摘要:而柯里化是一個(gè)屬于函數(shù)式編程的一個(gè)常見(jiàn)的技巧。簡(jiǎn)單來(lái)說(shuō),函數(shù)柯里化就是對(duì)高階函數(shù)的降階處理。讓你意外的是,這就是柯里化的基本思想,簡(jiǎn)單地讓人猝不及防。 函數(shù)式編程是一種被部分JavaScript程序員推崇的編程風(fēng)格,更別說(shuō) Haskell 和 Scala 這種以函數(shù)式為教義的語(yǔ)言。原因是因?yàn)槠淠苡幂^短的代碼實(shí)現(xiàn)功能,如果掌握得當(dāng),能達(dá)到代碼文檔化(代碼本身具有很高可讀性甚至可以代替文檔...

    MRZYD 評(píng)論0 收藏0
  • 函數(shù)式編程與面向?qū)ο缶幊蘙1]: Lambda表達(dá)式 函數(shù)柯里化 高階函數(shù)

    摘要:函數(shù)式編程與面向?qū)ο缶幊瘫磉_(dá)式函數(shù)柯里化高階函數(shù)之劍什么是表達(dá)式例子定義表達(dá)式是一個(gè)匿名函數(shù),表達(dá)式基于數(shù)學(xué)中的演算得名,直接對(duì)應(yīng)于其中的抽象,是一個(gè)匿名函數(shù),即沒(méi)有函數(shù)名的函數(shù)。 函數(shù)式編程與面向?qū)ο缶幊蘙1]: Lambda表達(dá)式 函數(shù)柯里化 高階函數(shù).md 之劍 2016.5.2 11:19:09 什么是lambda表達(dá)式 例子 For example, in Lisp the...

    張金寶 評(píng)論0 收藏0
  • 對(duì)比scala,javascript實(shí)現(xiàn) 特質(zhì)(trait) 的部分特性

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

    cocopeak 評(píng)論0 收藏0
  • vavr:讓你像寫(xiě)Scala一樣寫(xiě)Java

    摘要:是在嘗試讓擁有跟類(lèi)似的語(yǔ)法。在中使用,需要顯示得將集合轉(zhuǎn)成的步驟,而在中則免去了這樣的步驟。中的語(yǔ)句只能針對(duì)常量起作用,而使用模式匹配則可以對(duì)另一個(gè)函數(shù)的返回結(jié)果起作用,功能非常搶到。 Hystrix是Netflix開(kāi)源的限流、熔斷降級(jí)組件,去年發(fā)現(xiàn)Hystrix已經(jīng)不再更新了,而在github主頁(yè)上將我引導(dǎo)到了另一個(gè)替代項(xiàng)目——resilience4j,這個(gè)項(xiàng)目是基于Java 8開(kāi)發(fā)...

    andycall 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<