【发布时间】:2016-01-19 06:10:52
【问题描述】:
假设我有一个通用的 Proc、Lambda 或 method,它接受一个可选的第二个参数:
pow = -> (base, exp: 2) { base**exp }
现在我想 curry 这个函数,给它一个 exp 或 3。
cube = pow.curry.call(exp: 3)
这里有一个歧义,源于关键字参数和新的哈希语法,其中 Ruby 将 exp: 3 解释为作为第一个参数 base 传递的哈希。这导致该函数立即被调用,当#** 被发送到哈希时呈现一个NoMethodError。
为第一个参数设置默认值同样会导致在currying时立即调用该函数,如果我将第一个参数标记为必需,而不提供默认值:
pow = -> (base:, exp: 2) { base**exp }
当我尝试对Proc 进行柯里化时,解释器会抱怨我缺少参数base。
如何使用第二个参数对函数进行柯里化?
【问题讨论】:
-
要修复任意位置参数,请参阅stackoverflow.com/a/34813268/477037
标签: ruby functional-programming currying