如何咖喱方法?

时间:2012-12-20 18:47:12

标签: ruby

考虑这段代码

def f x, y
  x + y
end

g = lambda(&method(:f)).curry.(1)

g.(2) # => 3

g的表达式太难读了。可以简化吗?

2 个答案:

答案 0 :(得分:9)

如果您使用的是Ruby 2.2.0或更高版本,则可以使用Method#curry

def f(x, y)
  x + y
end
g = method(:f).curry[1]
p g[2] # => 3

答案 1 :(得分:7)

我认为你能得到的最短(也是最可读的!)是

  g = method(:f).to_proc.curry[1]
  g[2] # => 3