self.attribute与@attribute的优点?

Kev*_*vin 6 ruby

假设如下:

def create_new_salt
  self.salt = self.object_id.to_s + rand.to_s
end
Run Code Online (Sandbox Code Playgroud)

为什么使用"自我"会更好.而不是实例变量'@salt'?

Pet*_*ter 13

如果定义,使用self.salt =将导致使用该salt=方法.这对于确保salt=使用方法内的任何错误检查/转换非常有用.但是,这意味着必须有一个显式salt=方法(attr_accessor例如可能由其创建),这不一定是个好主意.

摘要:self.salt =如果您有自定义salt=方法,请使用; 使用@salt =如果你知道你想要什么@salt,如果你没有一个自定义的是,或salt=方法.

最后说明:我可能会这样写(我认为它更清晰一点)

def create_new_salt
  @salt = "#{object_id}#{rand}"
end
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@ Chuck对另一个答案的评论,我修改了这个以删除self.- 免费代码 - 这是错误的.