Tag: currying

Ruby Reverse Currying:这可能吗?

关于Ruby 1.9.x中的currying,我一直在某些地方使用它,并且可以像基本上支持默认参数一样转换为proc参数: p = proc {|x, y, z|x + y + z} p.curry[1] #=> returns a lambda p.curry[1, 2] #=> returns a lambda p.curry[1, 2, 3] #=> 6 p2 = p.curry[1, 2] p2.(2) #=> 5 p2.(4) #=> 7 非常方便,对吗? 事情是,我希望能够反向curry,这意味着,用随机值填充我的proc的最后一个参数。 像这样: p = proc{|x, y| x – y }.curry[1] p.(4) 我想要的结果是3.这会返回-3。

使用关键字参数来描述proc

假设我有一个通用的Proc , Lambda或带有可选第二个参数的方法: pow = -> (base, exp: 2) { base**exp } 现在我想讨论这个函数,给它一个3的exp 。 cube = pow.curry.call(exp: 3) 这里存在歧义,源于关键字参数和新的哈希语法,其中Ruby将exp: 3解释为作为第一个参数base传递的哈希。 这导致函数立即被调用,当#**被发送到散列时呈现NoMethodError 。 为第一个参数设置默认值同样会导致在currying时立即调用该函数,并且如果我根据需要标记第一个参数,而不提供默认值: pow = -> (base:, exp: 2) { base**exp } 当我试图讨论Proc时,翻译会抱怨我缺少参数base 。 如何用第二个参数来讨论函数?