ruby – 为什么私有setter的行为与其他私有方法不同?
这是一个我无法解释的有趣案例.看起来私人制定者是“私人的”,但有时也有例外.常规私有方法似乎与私有setter的行为不同:
class TestClass def do self.foo = :bar # fine self.baz # error end private def foo=(other) @foo = other end def baz end end TestClass.new.do 上面的代码设置@foo就好了,尽管被调用了一个明确的自我.然后它没有调用#baz,因为#baz是一个私有方法. 怎么了? 解决方法
私人制定者是特殊的,因为否则他们根本无法被召唤:
foo = :bar 分配给局部变量foo,它不发送消息foo =. 请注意,如果没有显式接收器,setter不是唯一无法调用的东西. @,– @,!,?,[],[] =,–,*,/,%,&,|,^,**,<<,>>,==,== =,=?,!?,!=,<,>,< =,> =,< =>而且如果没有明确的接收者,我可能也忘记了其他一些其他人.然后有像=,<< =等等的东西. 所有这些都需要例外.不幸的是,其中一些只有例外. 有人建议改变私人规则
至
它保留了定义的所有当前属性(最重要的是它可以在分析时静态确定). But so far,nothing has come of it. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |