假设我有一个类,我定义attr_accessor
就像这样:
private
attr_accessor :attribute
我理解为什么使用self.attribute
reader方法不起作用 - 在Ruby中你不能在显式接收器上调用私有方法。
我感到困惑的是为什么这条规则不适用于作家?为什么我可以调用self.attribute = 1
,并且不会抛出任何访问冲突错误?
答案 0 :(得分:2)
根据@JörgWMittag对Alan Skorkin的博客文章Ruby Access Control – Are Private And Protected Methods Only A Guideline?的评论:
Jörg没有引用消息来源,但他非常可靠。快速说明:有一种特殊情况,允许使用显式接收器调用私有方法:
如果方法名称以'='结尾(即它是属性编写者)并且显式接收器是'self',那么这是有效的。这是必要的,因为由于方法/变量歧义,只能使用显式接收器调用setter。否则就无法呼叫私人制定者。