Nein. Instanzvariablen werden erst definiert, wenn Sie ihnen zugewiesen werden, und attr_accessor
tut dies nicht automatisch.
Der Versuch, auf eine nicht definierte Instanzvariable zuzugreifen, gibt nil
zurück, aber definiert diese Variable nicht. Sie werden nicht wirklich definiert, bis Sie zu ihnen schreiben. attr_accessor
verlässt sich auf dieses Verhalten und führt nur einen Getter/Setter aus.
Sie können dies überprüfen, indem .instance_variables
Check-out:
class Test
attr_accessor :something
end
Eine neue Instanz von x
hat keine Instanzvariablen:
x = Test.new # => #<Test:0xb775314c>
x.instance_variables # => []
den Getter Aufrufen @something
nicht dazu führt, definiert zu werden:
x.something # => nil
x.instance_variables # => []
In voking die Setter tut Ursache @something
werden definiert:
x.something = 3 # => 3
x.instance_variables # => ["@something"]
Einstellung something
zurück zu nil
nicht instance_variables
zurückzukehren verursacht, so können wir sicher sein, dass das erste zurück leere Array nicht einfach ein Fall von ist instance_variables
Weglassen nil
Werte:
x.something = nil # => nil
x.instance_variables # => ["@something"]
Sie können auch überprüfen, dass dieses Verhalten nicht nur spezifisch für attr_accessor
ist:
class Test
def my_method
@x # nil
instance_variables # []
@x = 3
instance_variables # ["@x"]
end
end
Test.new.my_method