2013-02-11 65 views
0

调用类方法的替代方式,我想传递一个类方法作为参数有另一个对象调用它即通过PARAM或字符串

do_this(Class.method_name) 

然后:

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

唯一我可以看到的做法是将它作为字符串传递并使用eval,或者将该类和方法作为字符串传递,然后进行常量化和发送。 eval的下滑似乎是速度和调试?

有没有更简单的方法来做到这一点?

编辑:

很好的答案,但意识到我问的问题稍有不妥,想用不与方法传递的参数。

回答

3

我会建议一种类似于您提出的第二种解决方案的方法。

do_this(Class.method(:name), x) 

然后:

def do_this(method, x) 
    y = method.call(x) 
end 

也见Object#method的文档。

1

考虑使用一个进程内对象:

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) } 
+0

+1块形式。 – 2013-02-12 00:28:29