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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
使用 * 可以声明一个生成器函数:
是否也能够通过问号来声明函数自动柯里化:
然后如下调用:
调用时,支持问号作为占位符,类似 ramda.js 的 R.__:
对象字面量中声明:
Beta Was this translation helpful? Give feedback.
All reactions