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'
.