1
を更新していない私は、属性のアクセサを持つクラスを持っている:attr_accessor値
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
、a
とb
を呼び出した後、その新しい値を保持すべきだと思う:
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
これは起きていません - テストは失敗します:
Failures:
1) MyClass should set a and b
Failure/Error: expect(@thing.a).to eq 2
expected: 2
got: 1
(compared using ==)
属性アクセサーはどのように動作するのでしょうか?私は何が欠けていますか?
- しかし、私はそれがRubyを解析するものだと思います。 =代入演算子がメソッド名の=よりも優先されるため。ありがとう! –
Andreyが言っていることに疑問があれば、(元の) 'initialize'の最後に' p "ローカル変数=#{local_variables}"行を追加してください。 'foo = MyClass.new'が呼び出されると、ローカル変数= [:a、:b]" 'が表示されます。 –