首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列attr_writer

阵列attr_writer
EN

Stack Overflow用户
提问于 2013-01-24 07:49:46
回答 2查看 592关注 0票数 1

我和Ruby的attr_writer混在一起。我试图在数组中添加一个值,但遇到了以下错误:

第13行:# (NoMethodError)的未定义方法“测试”

代码语言:javascript
复制
class Pet
  attr_writer :test
  def initialize()
    @test = []
  end
end

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

为什么?据我所知,attr_writer等同于setter方法。请解释一下。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-24 07:51:59

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

代码语言:javascript
复制
pet.test << "Test was a pet"

以下是红宝石对它的看法(或多或少)

代码语言:javascript
复制
t = pet.test
t << "Test was a pet"

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

代码语言:javascript
复制
pet.test = ['Test was a pet']

顺便提一句:我个人认为只写属性是一种代码气味。这里可能出了点问题。在我的职业生涯中,我从来没有使用过只写的属性。

票数 7
EN

Stack Overflow用户

发布于 2013-01-24 08:01:31

最好的方法是使用存取者方法。这样,您就可以用一行代码定义setter和getter变量。在访问器方法就位之后,您可以检索定义的实例变量值,也可以设置另一个值。

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

代码语言:javascript
复制
attr_accessor :test
...
print pet.test << "Test was a pet" # => ["Test was a pet"]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14496283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档