在Ruby中,爲什麼我不能在模塊的self.included
方法中直接設置變量的值?在`self.included`內設置變量
例如,下面的代碼輸出NilClass
(指示@sound
變量沒有被設置):
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
但是,如果我模塊的speak
方法(代替的內部中設置的@sound
值self.included
),然後該變量設置正確。例如,下面的代碼輸出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
我本來期望上述輸出String
兩個代碼示例。
如果您從另一個角度思考它會更有意義:哪個'狗'的'@聲音'應該包括在內?他們全部?您是否真的想爲'狗'尚未設置'@聲音'的狗'初始化默認值? – Linuxios