我想传递一个类方法作为参数让另一个对象调用它,即
do_this(Class.method_name)
然后:
def do_this(class_method)
y = class_method(local_var_x)
end
我能看到的唯一方法是将它作为字符串传递并使用eval,或者将类和方法作为字符串传递,然后进行constantize和send。下降到eval似乎是速度和调试?
有更简单的方法吗?
编辑:
答案很好,但实现我问的问题略有错误,想使用一个未通过该方法传递的参数。
答案 0 :(得分:3)
我建议采用与您提出的第二种解决方案类似的方法。
do_this(Class.method(:name), x)
然后:
def do_this(method, x)
y = method.call(x)
end
另请参阅Object#method
的文档。
答案 1 :(得分:1)
考虑使用proc对象:
def do_this(myproc)
y = myproc.call
end
然后
do_this( Proc.new { klass.method(x) } )
虽然你也应该考虑使用块,这在红宝石风格中更多。那看起来像是:
def do_this
y = yield
end
并致电:
do_this { klass.method(x) }