我和Ruby的attr_writer混在一起。我试图在数组中添加一个值,但遇到了以下错误:
第13行:# (NoMethodError)的未定义方法“测试”
class Pet
attr_writer :test
def initialize()
@test = []
end
end
pet = Pet.new()
pet.test << "Test was a pet"为什么?据我所知,attr_writer等同于setter方法。请解释一下。谢谢。
发布于 2013-01-24 07:51:59
是的,attr_writer定义了一个setter方法。但是您的代码试图使用getter
pet.test << "Test was a pet"以下是红宝石对它的看法(或多或少)
t = pet.test
t << "Test was a pet"如果您实际设置了一个数组,它将工作。
pet.test = ['Test was a pet']顺便提一句:我个人认为只写属性是一种代码气味。这里可能出了点问题。在我的职业生涯中,我从来没有使用过只写的属性。
发布于 2013-01-24 08:01:31
最好的方法是使用存取者方法。这样,您就可以用一行代码定义setter和getter变量。在访问器方法就位之后,您可以检索定义的实例变量值,也可以设置另一个值。
在您的代码中,您正在尝试初始化getter方法,即使将您的方法定义为setter。
attr_accessor :test
...
print pet.test << "Test was a pet" # => ["Test was a pet"]https://stackoverflow.com/questions/14496283
复制相似问题