0
为什么我可以通过Object#send(:private_method)
调用私人方法?为什么我可以通过Object#send来调用私有方法,但不能直接调用上述方法?
Ruby的private
关键字的目的是什么?如果不阻止直接调用某些方法?
有没有办法可靠地防止对象能够调用某些方法?
class Person
def say_hi
"hi"
end
private
def private_say_hi
"private hi"
end
end
me = Person.new
me.say_hi
#=> "hi"
me.private_say_hi
#Error: private method `private_say_hi' called for #<Person:0x00558df4b79a08>
me.send(:private_say_hi)
#=> "private hi"
设计接口时,可以使用私有方法指示方法不稳定,不应直接由对象使用。 –
它没有完全使用send方法,并且引发了一个警告消息,但是这里是一个重写send方法以防止访问私有方法的例子:[link](https://stackoverflow.com/问题/ 20639857 /如何禁用-a-certain-method-in-ruby-being-being-being-being-the-the-the-console) – Pend
你需要重写很多东西... https:// stackoverflow .com/questions/5349624/how-to-call-methods-dynamically-based-on-name/26284769#26284769你可能可以做一个便宜的检查来电者... –