数组的attr_writer

时间:2013-01-24 07:49:47

标签: ruby

我对Ruby的attr_writer感到困惑。 我正在尝试在数组中添加一个值,但我遇到以下错误:

  

第13行:#(NoMethodError)的未定义方法`test'

class Pet
  attr_writer :test
  def initialize()
    @test = []
  end
end

pet = Pet.new()
pet.test << "Test was a pet"

为什么呢?据我了解,attr_writer相当于一个setter方法。 请解释。谢谢。

2 个答案:

答案 0 :(得分:7)

是的,attr_writer定义了一个setter方法。但是你的代码试图使用getter

pet.test << "Test was a pet"

以下是ruby如何看待它(或多或少)

t = pet.test
t << "Test was a pet"

如果您实际设置了一个数组,它将起作用

pet.test = ['Test was a pet']

作为旁注:我个人认为只写属性是代码气味。这里可能有些不对劲。在我的职业生涯中,我从未使用过只写属性。

答案 1 :(得分:-1)

最好的方法是使用attr_accessor方法。这样,您就可以使用一行代码定义setter和getter变量。使用访问器方法,您可以检索已定义的实例变量值或设置另一个值。

在您的代码中,您尝试初始化getter方法,即使您将方法定义为setter。

attr_accessor :test
...
print pet.test << "Test was a pet" # => ["Test was a pet"]