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 ==)
Не является это как должны работать атрибуторы доступа? Что мне не хватает?
Я думал, что из-за attr_accessor добавляет а = а б = методы в классе, что их действие на «я» будет подразумеваться - но я предполагаю, что это рубинский парсинг. = как оператор присваивания имеет приоритет над = в имени метода. благодаря! –
Если кто-то задает вопрос, что говорит Андрей, добавьте строку 'p 'local variables = # {local_variables}" 'в конце (оригинал)' initialize'. Когда вызывается 'foo = MyClass.new', отображаются« local variables = [: a,: b] »'. –