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你可能可以做一個便宜的檢查來電者... –