【发布时间】:2017-10-18 10:31:27
【问题描述】:
为什么我可以通过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"
【问题讨论】:
-
在设计接口时,可以使用私有方法,表示该方法不稳定,不应该被对象直接使用。
-
它没有保持对send方法的完全使用,并发出警告消息,但这里是一个覆盖send方法以防止访问私有方法的示例:link跨度>
-
您将需要覆盖很多东西...stackoverflow.com/questions/5349624/…您可以对调用者进行廉价检查...
-
FWIW,你可能有更好的运气“无论如何可以可靠地防止对象能够调用某些方法?”作为问题的标题,并编辑您的问题以符合主题。当然,那很可能只是stackoverflow.com/questions/20639857/…的骗子。就像现在一样,它是广泛的和基于意见的......
-
最好还是可以调用它们,否则受阻的程序员只会将代码复制/粘贴到新位置。那么你会有两个问题......
标签: ruby