0

我试过这个,但它不起作用。

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>'
4

1 回答 1

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"
于 2013-09-29T04:16:20.890 回答