Replies: 11 comments
-
函数 curry 的需求是什么呢?或者说什么场景需要使用一个 operator 而不是用 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
自动curry有个问题就是似乎无法和 default param 共存。 比如对于 |
Beta Was this translation helpful? Give feedback.
-
返回 参数如有默认值:
则 |
Beta Was this translation helpful? Give feedback.
-
不是什么迫切的需求,譬如 pipeline 和 partial function 一样,没有倒也无妨,基于函数高阶特性,利用现成类库或手工实现都不算难事。 在增强函数式表达方面,既然提案管道与偏函数都阳光普照了,柯里化何不一起明媚? |
Beta Was this translation helpful? Give feedback.
-
@mwc 需要注意一点,JS 里 default param 可以出现在任何位置,不一定是最后。 如果是 从js现有的default param语义来说, 当然我认为你描述的语义也是有道理的,ruby似乎就是如此。但js现有的default param的设计与此不太一致。 |
Beta Was this translation helpful? Give feedback.
-
我个人觉得并没有阳光普照,而是前景不明…… |
Beta Was this translation helpful? Give feedback.
-
我理解他的意思似乎应该返回函数 |
Beta Was this translation helpful? Give feedback.
-
如果是 如果不考虑现有语法,理应是返回部分函数,等待接收最后一个参数的值,即 |
Beta Was this translation helpful? Give feedback.
-
以下是一个初步构思: CurryFunction支持柯里化的函数称为 CurryFunction,其 constructor 指向下述的 CurryFunction 函数。 constructor
声明式通过在
支持柯里化函数的特点是参数无需一次给足,在不足的情况下,会再次返回一个新的支持自动柯里化的函数;当参数提供完毕(视乎提供的实参个数总和是否大于或等于函数的length值):
表达式/匿名
对象成员方法
类声明构造函数允许柯里化 虽然 class 的 constructor 不允许是 GeneratorFunction,但可以是 CurryFunction:
构造函数声明自动柯里化,可以延迟 User 实例的创建。
箭头函数柯里化有鉴于箭头生成器(Arrow Generator),
存在默认参数情况(含非尾部默认参数)及REST参数
全局 Curry 函数转换函数为 CurryFunction
Function.prototype.isCurry()判断一个函数是否柯里化函数
调用已使用 ? 声明的函数,例如:
调用时无需指定 ? 实参占位,语言
如需变更实参提供顺序,使用 ? 实参占位符 调用参考 partial function,但是建议返回 curry; 使用 ? 实参占位符改变参数传递顺序示例
实参一旦显式指定 ? 占位符进行调用,调用表达式的规则(参考下一节)将有所改变,但返回的 CurryFunction 仍支持隐式柯里化。 多个占位符示例
调用表达式规则:
|
Beta Was this translation helpful? Give feedback.
-
@mwc 你现在这个已经比较复杂了,比如混合 partial 和 curry。也不是说不行,但复杂的设计需要更强有力的动机和用例,还有正反面因素的对比。此外有很多你的设计决策(比如构造器支持curry而箭头函数不支持)需要解释原因和目的。 我先提一个比较重要的问题,如果我们有 |
Beta Was this translation helpful? Give feedback.
-
使用 * 可以声明一个生成器函数:
是否也能够通过问号来声明函数自动柯里化:
然后如下调用:
调用时,支持问号作为占位符,类似 ramda.js 的 R.__:
对象字面量中声明:
Beta Was this translation helpful? Give feedback.
All reactions