Ruby on rails 作为参数的ruby-pass方法
我试图将一个方法作为参数传递给方法2,执行此方法并返回结果:Ruby on rails 作为参数的ruby-pass方法,ruby-on-rails,ruby,ruby-on-rails-3,methods,parameters,Ruby On Rails,Ruby,Ruby On Rails 3,Methods,Parameters,我试图将一个方法作为参数传递给方法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)
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)
当您:
return method_2( klass.foo, "test" )
klass.foo需要一个参数,这可能是导致错误的原因。您可以使用符号来引用方法:
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
所有这些都是相当做作的例子;你有没有想解决的具体问题