通过param或string调用类方法的替代方法

时间:2013-02-11 20:27:21

标签: ruby

我想传递一个类方法作为参数让另一个对象调用它,即

do_this(Class.method_name)

然后:

def do_this(class_method)
  y = class_method(local_var_x)
end

我能看到的唯一方法是将它作为字符串传递并使用eval,或者将类和方法作为字符串传递,然后进行constantize和send。下降到eval似乎是速度和调试?

有更简单的方法吗?

编辑:

答案很好,但实现我问的问题略有错误,想使用一个未通过该方法传递的参数。

2 个答案:

答案 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) }