51js上asfman翻译了http://ejohn.org/blog/partial-functions-in-javascript/
讨论在:http://bbs.51js.com/viewthread.php?tid=83359&extra=page%3D1
curry和partial的差别就是:
curry是斩首
function f(a,b,c)
f.curry(x)之后变成了
function f1(b,c)
实际调用时是:f(x,b,c)
partial基本上是凌迟(想挖哪儿就挖哪儿)
function f(a,b,c)
f.partial(a) 之后变成了
function f1(b, c) // 斩首,跟curry一样
f.partial(_,x) 之后变成了
function f1(a, c) // 剜心
实际调用时是 f(a,x,c)
f.partial(_,_,x) 之后变成了
function f1(a, b) // 去势
实际调用时是 f(a,b,x)
f.partial(_,heart,_,stone) 之后变成了
实际调用时是 f(a,heart,c,stone)
最后还有一个bind(已列入ES3.1),bind基本上等同于curry,但是连元神(this)一起灭 。
注:下划线是占位符(由类库提供)。下划线固然有全局名称冲突的问题,故ejohn的例子里用的是undefined,但是Oliver(functional.js的作者)指出用undefined容易引发调试问题,并说服了Dean(偶像级神人),当然也说服了偶。。。
------------------------------------------------------------------------------------------------------------------------
原文地址:
相关推荐
这样做的好处在于,可以实现函数的部分应用(partial application),即将一部分参数预先绑定到函数上,生成一个新的函数,新函数在调用时只需要提供剩余的参数。 1. **什么是Currying** Currying,也称为部分求值...
类选择符和标识选择符的主要区别在于它们的使用范围。类选择符可以应用于多个 HTML 元素上,而标识选择符只能应用于一个 HTML 元素上。因此,在设计样式时,需要根据实际情况选择合适的选择符。 使用类选择符和标识...
根据提供的文件信息,我们可以提炼出以下几...通过以上知识点,我们可以了解到带类型 Lambda 演算的多方面应用和重要性,同时认识到它与无类型 Lambda 演算的根本区别,并且认识到此领域中的最新进展和研究的多学科性。
偏函数和柯里化的区别: 柯里化是把一个接受 n 个参数的函数,由原本的一次性传递所有参数并执行变成了可以分多次接受参数再执行,例如:add = (x, y, z) => x + y + z→curryAdd = x => y => z => x + y + z; 偏...
函数式编程与命令式编程的主要区别在于,命令式编程允许状态改变和副作用,而函数式编程则禁止这些行为。副作用可能导致程序行为难以预测,而函数式编程的引用透明性则确保了相同的输入始终产生相同的输出,简化了...
我感觉很多人都对函数加里化(Currying)和偏函数应用(Partial Application)之间的区别搞不清楚,尤其是在相似的上下文环境中它们同时出现的时候。 偏函数解决这样的问题:如果我们有函数是多个参数的,...
更复杂的情况下,如高阶函数应用,如Curry化,展示了函数式语言如何将函数作为第一类公民,允许动态构造新函数,这在命令式语言中通常是受限的。 总之,函数式编程语言以其独特的理论基础,λ演算,提供了构建无副...
在提供的示例中,`currying` 函数用于将普通函数转换为 curry 函数,以便在后续调用中逐步添加参数。当没有参数传递时,使用 `apply` 调用原始函数并传递累积的参数。 5. 其他相关知识点: - `arguments` 对象:在...
例如,强类型语言(如Java、C#)与弱类型语言(如JavaScript早期版本)之间的区别在于前者在编译或解释时会进行严格的类型检查,而后者则允许在运行时动态改变变量类型。这种差异直接影响到了编程风格、可读性及维护...
另外,curry化(Currying)也是Haskell中的一个重要概念,它允许将多参数函数转化为一系列单参数函数。 5. **6.OverloadingandTypeClasses.ppt - 类型类与重载** Haskell通过类型类实现了一种形式的多态,类似于...
值得注意的是,随着ES6的发布,JavaScript引入了`Proxy`对象,它可以用来创建代理函数,对函数调用进行拦截和预处理,这是另一种处理函数的手段,但与柯里化有本质的区别。 总的来说,JavaScript函数的柯里化是一种...
在信息科学中,数据、信息、知识和价值四个概念是紧密相连的,但它们之间也存在着明显的区别。数据是一种过程、状态或结果的记录,可以被数字化、存储和处理。信息是包含在数据之中的,可以被人脑理解和思维推理和...
10. **部分应用** (`_.partial` 和 `_.partialRight`): 这两个方法允许你在函数调用之前预先设置一些参数,生成一个新函数,方便后续使用。 通过深入学习和实践 Lodash-fp,你可以提升 JavaScript 开发中的函数式...
它们可以放在变量前面(前自增/自减)或后面(后自增/自减),其区别在于操作顺序: - 后自增/自减:先使用当前值,然后增加/减少。 - 前自增/自减:先增加/减少,然后使用新值。 例如: ```php $x = 4; echo $x++...
本主题将深入探讨Haskell的基本概念、语法特点以及它如何与其他编程范式区别开来。 1. 函数式编程基础 Haskell是基于λ演算的,它强调使用不可变数据和纯函数。纯函数意味着它们没有副作用,仅依赖于输入参数来产生...
- 高阶函数:了解如何使用函数作为参数和返回值,以及`curry()`和`compose()`等高阶函数的应用。 - 函数组合:学习如何通过函数组合实现复杂逻辑。 7. **ES6新特性** - 类与继承:掌握ES6中的`class`关键字和...
因此,表达式与语句之间并无区别。 - **函数与块** - **匿名函数定义:** Ruby提供了多种方式来定义匿名函数(也称为块),应用时可以根据需要选择不同的形式。 - **函数调用:** 函数调用时可以省略括号,除非...
为了和IAC(它有一个255的值)字符区别。 3. 默认的规范 WON'T NAWS DON'T NAWS 这个选项不假定任何默认的窗口尺寸信息。通常由TERMINAL TYPE Telnet选项传递的终端类型可能暗示着一个窗口尺寸,但是对于这...
理解它们的原理和区别,以及如何在不同场景下选择合适的控制结构,对于解决代码挑战至关重要。例如,实现一个计算斐波那契数列的函数,既可以用递归,也可以用循环。 8. **错误处理**:在编写代码时,考虑错误处理...