数组的attr_writer

new*_*bie 1 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"
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*sev 7

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

pet.test << "Test was a pet"
Run Code Online (Sandbox Code Playgroud)

这是红宝石看到它的方式(或多或少)

t = pet.test
t << "Test was a pet"
Run Code Online (Sandbox Code Playgroud)

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

pet.test = ['Test was a pet']
Run Code Online (Sandbox Code Playgroud)

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