为什么我可以通过Object#send(:private_method)
调用私有方法?
如果不阻止直接调用某些方法,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"
答案 0 :(得分:2)
仔细看看你做了什么:
me.send(:private_say_hi)
在任何地方,方法private_say_hi
都以以下形式调用:
me.private_say_hi
这就是原因。是不是很明显?
正如定义所说。避免使用显式接收器调用。
根据您的需要使用undef
,undef_method
或remove_method
。