当使用私有attr_accessor时,为什么self.attribute =工作,但self.attribute不工作?

时间:2017-08-15 21:15:24

标签: ruby

假设我有一个类,我定义attr_accessor就像这样:

private

attr_accessor :attribute

我理解为什么使用self.attribute reader方法不起作用 - 在Ruby中你不能在显式接收器上调用私有方法。

我感到困惑的是为什么这条规则不适用于作家?为什么我可以调用self.attribute = 1,并且不会抛出任何访问冲突错误?

1 个答案:

答案 0 :(得分:2)

根据@JörgWMittag对Alan Skorkin的博客文章Ruby Access Control – Are Private And Protected Methods Only A Guideline?的评论:

  

快速说明:有一种特殊情况,允许使用显式接收器调用私有方法:

     

如果方法名称以'='结尾(即它是属性编写者)并且显式接收器是'self',那么这是有效的。这是必要的,因为由于方法/变量歧义,只能使用显式接收器调用setter。否则就无法呼叫私人制定者。

Jörg没有引用消息来源,但他非常可靠。