首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >attr_accessor不更新值

attr_accessor不更新值
EN

Stack Overflow用户
提问于 2016-11-01 18:24:07
回答 1查看 1.2K关注 0票数 3

我有一个带有属性访问器的类:

代码语言:javascript
复制
class MyClass
  attr_accessor :a, :b

  def initialize
    @a = 1
    @b = 2
  end

  def update_values options
    a = options[:a]
    b = options[:b]
  end
end

我认为在调用update_values之后,ab应该保留它们的新值:

代码语言:javascript
复制
describe MyClass do
  before do
    @thing = MyClass.new
  end

  it 'should set a and b' do
    expect(@thing.a).to eq 1
    expect(@thing.b).to eq 2
    @thing.update_values a: 2, b: 5
    expect(@thing.a).to eq 2
    expect(@thing.b).to eq 5
  end
end

这是不可能的-测试失败了:

代码语言:javascript
复制
Failures:

  1) MyClass should set a and b
     Failure/Error: expect(@thing.a).to eq 2

       expected: 2
            got: 1

       (compared using ==)

这不是属性访问器应该工作的方式吗?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 18:24:48

您只是定义局部变量ab

相反,您想要的是为实例变量ab设置新值。以下是你如何做到这一点:

代码语言:javascript
复制
def update_values options
  self.a = options[:a] # or @a = options[:a]
  self.b = options[:b] # or @b = options[:b]
end

现在:

代码语言:javascript
复制
foo = MyClass.new
#=> #<MyClass:0x007f83eac30300 @a=1, @b=2>
foo.update_values(a: 2, b: 3)
foo #=>#<MyClass:0x007f83eac30300 @a=2, @b=3>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40366254

复制
相关文章

相似问题

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