1
Ich habe eine Klasse mit dem Attribut Accessoren:attr_accessor nicht Wert zu aktualisieren
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
Ich denke, dass update_values
nach dem Aufruf, a
und b
sollten ihre neuen Werte beibehalten:
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
Dies geschieht nicht - der Test schlägt fehl:
Failures:
1) MyClass should set a and b
Failure/Error: expect(@thing.a).to eq 2
expected: 2
got: 1
(compared using ==)
Ist nicht wie Attribitor Accessoren funktionieren sollten? Was vermisse ich?
Ich dachte, dass da attr_accessor die ein fügt = und b = Methoden der Klasse, die ihre Wirkung auf ‚Selbst‘ implizit sein würde - Aber ich denke, es ist eine Ruby-Parsing-Sache. = als Zuweisungsoperator hat Vorrang vor = in einem Methodennamen. Vielen Dank! –
Wenn man fragt, was Andrey sagt, füge die Zeile 'p 'lokale Variablen = # {local_variables}" 'am Ende von (dem Original)' initialize' hinzu. Wenn 'foo = MyClass.new' aufgerufen wird, wird' "local variables = [: a,: b]" 'angezeigt. –