1

我对 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 方法。请解释。谢谢你。

4

2 回答 2

7

是的,attr_writer定义了一个 setter 方法。但是您的代码尝试使用吸气剂

pet.test << "Test was a pet"

这是红宝石的看法(或多或少)

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

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

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

附带说明:我个人认为只写属性是一种代码味道。这里可能有问题。在我的职业生涯中,我从未使用过只写属性。

于 2013-01-24T07:51:59.867 回答
-1

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

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

attr_accessor :test
...
print pet.test << "Test was a pet" # => ["Test was a pet"]
于 2013-01-24T08:01:31.150 回答