我对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方法。 请解释。谢谢。
答案 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"]