Emi*_*kol 6 ruby reflection visibility
使用动态方法调用(#send或#method)忽略方法的可见性.
有没有一种简单的方法可以动态调用一个调用私有方法失败的方法?
and*_*hin 12
据我所知 - 你需要方法public_send:
Run Code Online (Sandbox Code Playgroud)----------------------------------------------------- Object#public_send obj.public_send(symbol [, args...]) => obj From Ruby 1.9.1 ------------------------------------------------------------------------ Invokes the method identified by _symbol_, passing it any arguments specified. Unlike send, public_send calls public methods only. 1.public_send(:puts, "hello") # causes NoMethodError
使用public_send而不是send:
my_object.public_send :method, *args
Run Code Online (Sandbox Code Playgroud)
它是Ruby 1.9的新功能,所以对于较旧的Ruby,你可以require 'backports/1.9.1/kernel/public_send'.
| 归档时间: |
|
| 查看次数: |
4820 次 |
| 最近记录: |