1
extend
インスタンスを作成するときと同じ方法でインスタンスを作成するときに、いくつかのインスタンス変数を設定するには、initialize
を使用します。この例ではRuby:拡張インスタンス変数
変数セットの拡張「失われた」である。
module Mod
def self.extended(base)
@from_module = "Hello from Mod"
puts "Setting variable to: #{@from_module}"
end
def hello_from_module
return @from_module
end
end
class Klass
def initialize
@from_class = "Hello from Klass"
end
def hello_from_class
return @from_class
end
end
klass = Klass.new #=> #<Klass:0x00000000ed8618 @from_class="Hello from Klass">
klass.extend(Mod) #=> #<Klass:0x00000000ed8618 @from_class="Hello from Klass">
"Setting variable to: Hello from Mod"
klass.hello_from_class #=> "Hello from Klass"
klass.hello_from_module #=> nil (warning: instance variable @from_module not initialized)
変数は失われません。インスタンス変数はオブジェクト(インスタンス)に属します。そのため、インスタンス変数はインスタンス変数と呼ばれています。変数を設定しているインスタンスは何ですか?メソッドは 'Mod'のシングルトンメソッドなので、' self'は 'Mod'、インスタンス変数は' Mod'のインスタンス変数です。 –
'return'はRubyに暗黙のうちに残されていることに注意してください。スタックに残された最後のものはデフォルトで戻り値です。したがって、メソッドの最後のものが戻り値として必要な場合は通常省略できます。 – tadman