jjzjj

currying

全部标签

javascript 'curry' ,需要对此代码进行一些解释

我正在阅读《JavaScript-TheGoodParts》这本书,在第4.14章Curry中,书中给出了以下示例:Function.method('curry',function(){varslice=Array.prototype.slice,args=slice.apply(arguments),//1st-argumentsthat=this;returnfunction(){returnthat.apply(null,args.concat(slice.apply(arguments)));//2nd-arguments}})varadd1=add.curry(1);docu

javascript - 如何使用 UnderscoreJS 进行柯里化(Currying)?

我正在尝试使用_.bind(...)。我知道如何使用绑定(bind)强制函数上下文,但还不知道如何进行柯里化(Currying)。我尝试的是:add=function(number){this.sum=this.sum+number;}add5=_.bind(add,{sum:0},5)但是,调用add5(),或者add5(5)似乎没有什么效果。任何线索如何包装参数,以便从一个调用到另一个调用保留上下文? 最佳答案 可能您想做部分应用,而不是currying/schönfinkeling。下划线有_.partial为此功能:func

javascript - 有人可以向我解释这个 JavaScript 函数的流程吗? (关闭概念)

我正在阅读“EloquentJavaScript”。第3章介绍了“Closure”的概念并给出了几个例子。其中之一是下一个:functionmultiplier(factor){returnfunction(number){returnnumber*factor;};}vartwice=multiplier(2);console.log(twice(5));//→10我想我理解了这个概念。如果我首先执行console.log(twice),由于变量number未定义,我得到的是[Function]。我不明白的是twice(5)是如何工作的。为什么局部变量number被初始化为值5?此外

javascript - 带递归的 JS Curry 函数

请在将其标记为重复之前阅读。我不是要求单一的curry调用。这个函数乘法,乘法(4,4,4)//64functionmultiplication(...args){returnargs.reduce((accum,val)=>accum*val,1)}但是我正在努力实现其他目标......这个相同的函数也应该乘以它的curry函数括号。例如/*whichreturnthemultiplicationofthreenumbers.Thefunctioncanbecalledinanyofthefollowingforms:multiply(2,3)(4)=>24multiply(2)(3

javascript - 取消 javascript 中 n 个参数的柯里化(Currying)函数

如果f::a->b->c是柯里化(Currying)的,那么uncurry(f)可以定义为:uncurry::(a->b->c)->((a,b)->c)我正在尝试在javascript中实现上述功能。我的以下实现是否正确且足够通用,或者是否有更好的解决方案?constuncurry=f=>{if(typeoff!="function"||f.length==0)returnf;returnfunction(){for(leti=0;ia=>b=>f(a,b);constcurriedSum=curry((num1,num2)=>num1+num2);console.log(currie

javascript - 在 React 中柯里化(Currying)事件处理程序

我正在尝试在组件上编写一个(curried?)onChange事件处理程序,该组件将接收一个key参数,该参数将让它知道状态对象中的哪个键更新。代码无法编译,提示'key'isnotdefined。classAppextendsComponent{constructor(props){super(props);this.state={firstName:null,lastName:null}this.handleChange=this.handleChange.bind(this);}handleChange=(key)=(event)=>{console.log(key,event)

javascript - 什么时候 a => f(a) 不等同于 f?

lodash的新手并尝试使用它以获得更多理解。我不明白以下代码的行为。了解_.curry的arity参数后,我有一个代码片段产生的结果对我来说似乎很奇怪。constwords=['jim','john'];constpad10=words=>_.map(words,word=>_.pad(word,10));console.log(pad10(words));//['jim','john']constflipMap=_.flip(_.map);constflipPad=_.flip(_.pad);constcurriedFlipMap=_.curry(flipMap,2);constp

javascript - 如何在 JavaScript 中部分应用成员函数?

我目前有一个部分应用程序函数,如下所示:Function.prototype.curry=function(){varargs=[];for(vari=0;i问题是它只适用于非成员函数,例如:functionfoo(x,y){alert(x+y);}varbar=foo.curry(1);bar(2);//alerts"3"我如何改写要应用于成员函数的curry函数,如:functionFoo(){this.z=0;this.out=function(x,y){alert(x+y+this.z);}}varbar=newFoo;bar.z=3;varfoobar=bar.out.cur

javascript - 动态柯里化(Currying),以及如何在 JavaScript 变量中同时保存函数和值

这个问题在这里已经有了答案:Variadiccurriedsumfunction(19个回答)关闭6年前。我正在学习JavaScript,我最近遇到了一个practiceproblem这要求我构建一个可以创建如下输出的函数:varthreeSum=sum(3);threeSum//3threeSum(4)//7threeSum(4)(3)//10threeSum(4)(3)(7)//17threeSum(4)(3)(7)()(2)//19threeSum-2//1threeSum+2//5我假设涉及柯里化(Currying),并且我认为我基本了解柯里化(Currying)如何以简单的形

javascript - 如何在未知数量的参数上柯里化(Currying)一个函数

假设我有一个名为multiplyDivide的函数如果我调用multiplyDivide(2)(3)(4)(6)它相当于2*3/4*6.更新:如果我事先不知道我将采用多少参数,是否可以编写这样的函数?例如,我可以有multiplyDivide(1)(2)或multiplyDivide(1)(2)(3)(4)...(n-1)(n) 最佳答案 这是可能的,但您需要定义终止条件,因为该问题本质上与编写递归函数的问题相同。该函数需要一种方法来判断它应该返回一个函数还是一个值。您如何表示对值(value)的需求取决于您。一种方法是检查是否传递