假设如下:self.attribute与@attribute的优点?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
为什么它更好地使用了“自我”。而不是实例变量'@salt'?
假设如下:self.attribute与@attribute的优点?
def create_new_salt
self.salt = self.object_id.to_s + rand.to_s
end
为什么它更好地使用了“自我”。而不是实例变量'@salt'?
如果已定义,使用self.salt =
将导致使用salt=
方法。这对于确保使用salt=
方法内的错误检查/转换很有用。但是,这意味着必须有明确的salt=
方法(例如可能由attr_accessor
创建),并且这不一定是个好主意。
摘要:如果您有自定义的salt=
方法,请使用self.salt =
;使用@salt =
如果你确切知道你想要@salt
是什么,或者如果你没有自定义salt=
方法。
最后说明一点:我可能会写这样的(在我看来这是一个更清晰一点)
def create_new_salt
@salt = "#{object_id}#{rand}"
end
编辑:感谢@ Chuck的另一个答案的评论,我修改这个删除self.
- 免费代码 - 这是错误的。
继彼得的回答是:
另一个有趣的一点是,self.salt=
可以被调用,即使盐=方法是私有的。这是普通Ruby规则的一个例外,即一个私有方法不能用明确的接收方来调用。
非常感谢彼得!我同意,我更喜欢你的版本。 – Kevin 2009-12-10 01:41:47