摘要:從語(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
摘要:函數(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),一...
摘要:而柯里化是一個(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á)到代碼文檔化(代碼本身具有很高可讀性甚至可以代替文檔...
摘要:函數(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...
摘要:特質(zhì)是的一個(gè)重要的特性,主要的使用方式有兩個(gè)方面拓寬瘦接口為胖接口。定義可堆疊的改變。相對(duì)于多重繼承而言最靈活的一方面就是所指定的對(duì)象只有到被混入之后才能確定。 特質(zhì)(trait)是scala的一個(gè)重要的特性,主要的使用方式有兩個(gè)方面:1.拓寬瘦接口為胖接口。2.定義可堆疊的改變。 trait相對(duì)于多重繼承而言最靈活的一方面就是super所指定的對(duì)象只有到被混入之后才能確定。 因?yàn)樘刭|(zhì)...
摘要:是在嘗試讓擁有跟類(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ā)...
閱讀 3955·2021-11-17 09:33
閱讀 3296·2021-10-08 10:05
閱讀 3124·2021-09-22 15:36
閱讀 1151·2021-09-06 15:02
閱讀 2780·2019-08-29 12:45
閱讀 1599·2019-08-26 13:40
閱讀 3409·2019-08-26 13:37
閱讀 431·2019-08-26 13:37