如何返回Ruby中另一个方法返回的lambda

时间:2013-09-29 04:06:23

标签: ruby lambda

我尝试了这个,但它没有用。

def n_times(thing)
    lambda {|n| thing * n }
end

def other(counter,thing)
    com = counter(thing)
    return com
end

com = other(n_times,10)
com.call("what ")

错误:

test.rb:1:in `n_times': wrong number of arguments (0 for 1) (ArgumentError)
    from test.rb:10:in `<main>'

1 个答案:

答案 0 :(得分:3)

n_times是一个需要一个参数的方法,您将其称为传递给other的第一个参数,但没有参数。这就是你得到的错误。您希望传递method(:n_times),将其转换为Proc而不是调用它。

其次,您在counter(thing)方法中有other。这是调用名为'counter'的方法,而不是使用名为'counter'的对象,它作为参数传递。您想将其更改为counter[thing]

最后,您将10传递给n_times并使用“what”调用生成的lambda,但这会评估10 * "what"这是NoMethodError。你需要反转这些论点。

所有在一起:

def n_times(thing)
  lambda { |n| thing * n }
end

def other(counter, thing)
  counter[thing]
end

other(method(:n_times), "what").call(10)
# "whatwhatwhatwhatwhatwhatwhatwhatwhatwhat"