Warum kann ich in Ruby den Wert der Variablen nicht direkt innerhalb der self.included
-Methode eines Moduls festlegen?Variablen in `self.included` setzen
Zum Beispiel kann der folgende Code ausgibt NilClass
(was anzeigt, dass die @sound
Variable nicht gesetzt worden ist):
module Animal
def self.included(klass)
attr_accessor :sound
@sound = "Woof!" # <-- Variable assignment
end
def speak
puts @sound.class
end
end
class Dog
include Animal
end
dog = Dog.new
dog.speak # => NilClass
Wenn ich jedoch den Wert von @sound
innerhalb des speak
Methode des Moduls gesetzt (statt Innenseite self.included
), dann wird die Variable korrekt gesetzt. Zum Beispiel kann die folgenden Code-Ausgänge String
:
module Animal
def self.included(klass)
attr_accessor :sound
end
def speak
@sound = "Woof!" # <-- Variable assignment
puts @sound.class
end
end
class Dog
include Animal
end
dog = Dog.new
dog.speak # => String
würde ich beiden Codebeispiele String
über der Ausgabe erwartet.
Es macht ein bisschen mehr Sinn, wenn man darüber aus einer anderen Perspektive nachdenkt: Welchen "Dog's" @ Sound "soll enthalten sein? Alle von ihnen? Versuchen Sie wirklich, einen Standardwert für 'Dog's zu initialisieren, deren' @ Sound's noch nicht gesetzt sind? – Linuxios