我试图将方法作为参数传递给method_2,执行此方法并返回结果:
def method_2( method_p, param )
res = method(method_p).call(param)
return res
end
def method_1
klass = MyKlass.instance
return method_2( klass.foo, "test" )
end
这是MyKlass文件:
class MyKlass
def foo(param)
param+param
end
end
我得到的只是一个错误
wrong number of arguments (0 for 1)
答案 0 :(得分:2)
您可以使用符号来引用方法:
def method_2(method_symbol, *args)
send method_symbol, *args
end
但是,由于您在特定对象上调用该方法,您可能必须将其作为附加参数传递,或者使用proc或lambda,这就像包裹在对象中的块:
def method_2(proc, *args)
proc.call(*args)
end
method_2(->(param){ klass.foo(param) }, "test")
使用块来执行此操作更为常见:
def method_2(receiver, *args, &block)
yield receiver, *args
end
method_2(klass, "test") do |receiver, param|
receiver.foo(param)
end
所有这些都是相当人为的例子;你试图解决一个具体的问题吗?
答案 1 :(得分:0)
当你:
return method_2( klass.foo, "test" )
klass.foo需要一个arg,这可能是导致错误的原因。