我想用红宝石做咖喱:

def add(a,b)
  return a+b
end

plus = lambda {add}
curry_plus = plus.curry
plus_two = curry_plus[2] #Line 24
puts plus_two[3]

我明白错误
func_test.rb:24:in `[]': wrong number of arguments (1 for 0) (ArgumentError)

来自func_test.rb:24:in`'
但是如果我这样做
plus = lambda {|a,b| a+ b}

似乎很管用。但是在用lambda赋值后,通过打印plus两种方式返回相同类型的对象。我误解了什么?

最佳答案

lambda {|a,b| a+ b}

创建一个lambda,该lambda接受两个参数,并在第一个参数上返回调用+的结果,第二个参数作为其参数。
lambda {add}

创建一个lambda,该lambda不接受任何参数,并且调用add时不带任何参数,这当然是一个错误。
做你想做的事,你应该做
plus = lambda {|x,y| add(x,y)}


plus = method(:add).to_proc

关于ruby - Ruby中的简单 curry ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4272114/

10-13 08:37