在Ruby中访问对象中的实例变量的常规方法是什么?

nfm*_*nfm 1 ruby conventions instance-variables

请考虑以下代码:

class Dog
  attr_accessor :name, :color

  def initialize(name, color)
  end
end
Run Code Online (Sandbox Code Playgroud)

在Ruby对象中,是直接访问实例变量(即@name = name)还是使用setter/getter方法(即name = name)的约定?

前者对我来说更清楚,但如果你实现自己的setter/getter方法(例如同时增加一个类变量),那么你最终必须使用两种方法(即@name = name ; color = color).

Ruby社区中的惯例是什么?我应该如何编写代码以便将其他人阅读?

Jos*_*Lee 6

使用name = value是一个错误,因为它创建了一个名为的局部变量name.你必须使用self.name = value.

至于惯例,@name如果你可以保证访问器总是轻量级attr_accessor的话,你只能使用它.在所有其他情况下,使用@nameover self.name将违反封装并让自己头疼.您在问题中给出了确切的原因 - 如果getter/setter中有额外的逻辑,如果直接访问实例变量,则必须复制它.