问题

我很难理解Ruby中的 attr_accessor .谁可以给我解释一下这个?我做了大量的Google搜索.我只是不能完全理解.



解决方法

假设您有一个类 Person .

class Person
end

person = Person.new
person.name # => no method error

显然,我们从未定义方法 name .让我们这样做.

class Person
  def name
    @name # simply returning an instance variable @name
  end
end

person = Person.new
person.name # => nil
person.name = "Dennis" # => no method error

Aha,我们可以读取名称,但这并不意味着我们可以分配名称.这是两种不同的方法.前者称为 reader ,后者称为 writer .我们没有创造作家,所以让我们这样做.

class Person
  def name
    @name
  end

  def name=(str)
    @name = str
  end
end

person = Person.new
person.name = 'Dennis'
person.name # => "Dennis"

真棒.现在我们可以使用读写器方法写入和读取实例变量 @name .除了这样做这么频繁,为什么浪费时间每次写这些方法?我们可以更容易.

class Person
  attr_reader :name
  attr_writer :name
end

即使这样也可以重复.当你想要读者和作者只使用accessor!

class Person
  attr_accessor :name
end

person = Person.new
person.name = "Dennis"
person.name # => "Dennis"

以相同的方式工作!并猜测什么:我们的person对象中的实例变量 @name 将被设置,就像我们手动进行,所以你可以使用它在其他方法.

class Person
  attr_accessor :name

  def greeting
    "Hello #{@name}"
  end
end

person = Person.new
person.name = "Dennis"
person.greeting # => "Hello Dennis"

就是这样.为了理解 attr_reader , attr_writer attr_accessor 方法实际上为你生成方法,阅读其他答案,书籍,ruby文档.




相关问题推荐