我尝试了这个,但它没有用。
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>'
答案 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"