2

コード スニペットに次の構文がありますが、それが何をするのかわかりません。

class << PushableModule = Module::new
 def new *args, &blk
   m = Module::new( *args, &blk )
   m.extend Pushable
   m
 end
end

まず、クラスまたはモジュールPushableModuleがファイル/プログラムに存在しません。次に、固有クラスを取得し、ブロックを定義する前にそれを等しく設定しているように見えますがModule::new、これはありません理解する。誰かが私にこれを説明してもらえますか(コードスニペットが実際に何をするのか)?

4

1 に答える 1

3

演算子の優先順位が間違っています。その意味は

class << (PushableModule = Module::new)
  ...
end

でモジュールを作成し、 というModule::new名前を付け、 でPushableModuleその固有クラスを開きます<<

のコンストラクターを上書きしていますPushableModulenewインスタンスメソッドとしてではなく として定義する必要があるためPushableModule.new、定義は固有クラス内で行われます。

通常は上書きせずnewにインスタンスメソッドinitializeを定義しますが、特別な場合にはnewコンストラクタを書き換えることができます。

于 2013-07-10T03:11:36.013 に答える