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
Iは、両方のコードのサンプル出力String
に上記期待しているであろう。最初の例で
別の観点から考えると、「Dog」の「@サウンド」が含まれていると考えられますか?それらのすべて? '@サウンド'がまだ設定されていない 'Dog'のデフォルト値を実際に初期化しようとしていますか? – Linuxios