3
拡張時に呼び出されるもの。rubyモジュールにはコンストラクタがありますか?
例:コードのこの作品:
module M
def init(x)
@x = 5
self
end
def foo
super
puts @x
end
end
class D
def foo
puts 1
end
end
D.new.extend(M).init(5).foo
作品や1〜5を返します。しかし、私は
D.new.extend(M.init(5)).foo
以上を読み取るために、まだ
D.new.extend(M(5)).foo
ないからバグを防ぐために、最後の行を変更したいです@xを設定します。同様のノートで
、私はあなたがモジュールを返すメソッドを持つことによってそれを行うことができます
class X
include Debug(5)
これは、モジュールの編集に苦労します。モジュール内部でこれを行う方法はありますか?例えば、 。モジュールM; def self.init(x); new_mod = M; ここにnew_modの#doの何か; new_mod; end; end; – alexloh
あなたは上記の方法を取ることができ、この種の治療を必要とするメソッドを作成するためにのみ使用することができます。したがって、 'Module.new'の代わりに、以前に書いた既存のモジュールで' module_eval'を呼び出すことができます。しかし、あなたの質問に直接答えるには:いいえ、モジュールにはコンストラクタがありません。 –