`
hax
  • 浏览: 964891 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

curry和partial的差别

    博客分类:
  • JS
阅读更多
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) 之后变成了
function f1(a, c)             // 剜心 + 沉江(脚上绑了大石)

实际调用时是 f(a,heart,c,stone)


最后还有一个bind(已列入ES3.1),bind基本上等同于curry,但是连元神(this)一起灭

注:下划线是占位符(由类库提供)。下划线固然有全局名称冲突的问题,故ejohn的例子里用的是undefined,但是Oliver(functional.js的作者)指出用undefined容易引发调试问题,并说服了Dean(偶像级神人),当然也说服了偶。。。
分享到:
评论

相关推荐

    js代码-curry

    这样做的好处在于,可以实现函数的部分应用(partial application),即将一部分参数预先绑定到函数上,生成一个新的函数,新函数在调用时只需要提供剩余的参数。 1. **什么是Currying** Currying,也称为部分求值...

    大家看了就明白了css样式中类class与标识id选择符的区别小结

    类选择符和标识选择符的主要区别在于它们的使用范围。类选择符可以应用于多个 HTML 元素上,而标识选择符只能应用于一个 HTML 元素上。因此,在设计样式时,需要根据实际情况选择合适的选择符。 使用类选择符和标识...

    Lambda Calculus with Types

    根据提供的文件信息,我们可以提炼出以下几...通过以上知识点,我们可以了解到带类型 Lambda 演算的多方面应用和重要性,同时认识到它与无类型 Lambda 演算的根本区别,并且认识到此领域中的最新进展和研究的多学科性。

    闭包与高阶函数案例解答

    偏函数和柯里化的区别: 柯里化是把一个接受 n 个参数的函数,由原本的一次性传递所有参数并执行变成了可以分多次接受参数再执行,例如:add = (x, y, z) => x + y + z→curryAdd = x => y => z => x + y + z; 偏...

    函数式编程语言编程和程序验证PPT学习教案.pptx

    函数式编程与命令式编程的主要区别在于,命令式编程允许状态改变和副作用,而函数式编程则禁止这些行为。副作用可能导致程序行为难以预测,而函数式编程的引用透明性则确保了相同的输入始终产生相同的输出,简化了...

    函数加里化和偏函数应用的比较

     我感觉很多人都对函数加里化(Currying)和偏函数应用(Partial Application)之间的区别搞不清楚,尤其是在相似的上下文环境中它们同时出现的时候。  偏函数解决这样的问题:如果我们有函数是多个参数的,...

    函数式编程语言编程和程序验证PPT课件.pptx

    更复杂的情况下,如高阶函数应用,如Curry化,展示了函数式语言如何将函数作为第一类公民,允许动态构造新函数,这在命令式语言中通常是受限的。 总之,函数式编程语言以其独特的理论基础,λ演算,提供了构建无副...

    JavaScript中call和apply方法的区别实例分析

    在提供的示例中,`currying` 函数用于将普通函数转换为 curry 函数,以便在后续调用中逐步添加参数。当没有参数传递时,使用 `apply` 调用原始函数并传递累积的参数。 5. 其他相关知识点: - `arguments` 对象:在...

    Types and Programming Languages

    例如,强类型语言(如Java、C#)与弱类型语言(如JavaScript早期版本)之间的区别在于前者在编译或解释时会进行严格的类型检查,而后者则允许在运行时动态改变变量类型。这种差异直接影响到了编程风格、可读性及维护...

    HASKELL函数编程讲义

    另外,curry化(Currying)也是Haskell中的一个重要概念,它允许将多参数函数转化为一系列单参数函数。 5. **6.OverloadingandTypeClasses.ppt - 类型类与重载** Haskell通过类型类实现了一种形式的多态,类似于...

    JavaScript函数柯里化原理与用法分析

    值得注意的是,随着ES6的发布,JavaScript引入了`Proxy`对象,它可以用来创建代理函数,对函数调用进行拦截和预处理,这是另一种处理函数的手段,但与柯里化有本质的区别。 总的来说,JavaScript函数的柯里化是一种...

    4.《大数据分析与计算》教材习题答案.docx

    在信息科学中,数据、信息、知识和价值四个概念是紧密相连的,但它们之间也存在着明显的区别。数据是一种过程、状态或结果的记录,可以被数字化、存储和处理。信息是包含在数据之中的,可以被人脑理解和思维推理和...

    lodash-fp:学习Lodash

    10. **部分应用** (`_.partial` 和 `_.partialRight`): 这两个方法允许你在函数调用之前预先设置一些参数,生成一个新函数,方便后续使用。 通过深入学习和实践 Lodash-fp,你可以提升 JavaScript 开发中的函数式...

    PHP学习 基础笔记

    它们可以放在变量前面(前自增/自减)或后面(后自增/自减),其区别在于操作顺序: - 后自增/自减:先使用当前值,然后增加/减少。 - 前自增/自减:先增加/减少,然后使用新值。 例如: ```php $x = 4; echo $x++...

    基本的

    本主题将深入探讨Haskell的基本概念、语法特点以及它如何与其他编程范式区别开来。 1. 函数式编程基础 Haskell是基于λ演算的,它强调使用不可变数据和纯函数。纯函数意味着它们没有副作用,仅依赖于输入参数来产生...

    Javascript-30-WesBos

    - 高阶函数:了解如何使用函数作为参数和返回值,以及`curry()`和`compose()`等高阶函数的应用。 - 函数组合:学习如何通过函数组合实现复杂逻辑。 7. **ES6新特性** - 类与继承:掌握ES6中的`class`关键字和...

    Ruby Reference Sheet.pdf

    因此,表达式与语句之间并无区别。 - **函数与块** - **匿名函数定义:** Ruby提供了多种方式来定义匿名函数(也称为块),应用时可以根据需要选择不同的形式。 - **函数调用:** 函数调用时可以省略括号,除非...

    关于rfc的文档组织:中国互动出版网

    为了和IAC(它有一个255的值)字符区别。 3. 默认的规范  WON'T NAWS  DON'T NAWS  这个选项不假定任何默认的窗口尺寸信息。通常由TERMINAL TYPE Telnet选项传递的终端类型可能暗示着一个窗口尺寸,但是对于这...

    代码挑战

    理解它们的原理和区别,以及如何在不同场景下选择合适的控制结构,对于解决代码挑战至关重要。例如,实现一个计算斐波那契数列的函数,既可以用递归,也可以用循环。 8. **错误处理**:在编写代码时,考虑错误处理...

Global site tag (gtag.js) - Google Analytics