假设如下:
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
为什么使用'self'更好。而不是实例变量'@salt'?
答案 0 :(得分:13)
如果已定义,使用self.salt =
将导致使用salt=
方法。这对于确保使用salt=
方法中的任何错误检查/转换非常有用。但是,这意味着必须有一个明确的salt=
方法(例如,可能由attr_accessor
创建),这不一定是个好主意。
摘要:如果您使用自定义self.salt =
方法,请使用salt=
;如果您确切知道自己想要@salt =
的内容,或者您没有自定义@salt
方法,请使用salt=
。
最后说明:我可能会这样写(我认为它更清晰一点)
def create_new_salt
@salt = "#{object_id}#{rand}"
end
编辑:感谢@ Chuck对另一个答案的评论,我已将其修改为删除self.
- 免费代码 - 这是错误的。
答案 1 :(得分:4)
除了彼得的好答案之外,我通常在Ruby中表示我使用的是attr_accessor
,使用self.attr =和self.attr而不是@attr。
编辑:没有“自我”,你就是在创建一个局部变量。让人惊讶。
答案 2 :(得分:2)
继Peter的回答:
另一个有趣的观点是即使salt =方法是私有的,也可以调用self.salt=
。这是普通Ruby规则的一个例外,即无法使用显式接收器调用私有方法。