1

次のようなルビーブロックを見てきました。

Vagrant::Config.run do |config|

   module MyModule      
   end

end

ブロック内でそのようなモジュールを宣言すると、どのような影響がありますか?

編集:

具体的には、VM が終了したときにクリーンアップを行うためのブロックがあり、次のようになります。

Vagrant::Config.run do |config|

  # vagrant config stuff

   module Vagrant
     module Provisioners
      class ChefClient < Chef
        def cleanup
          # cleanup here
        end
      end
    end
  end
end

モジュールが Vagrant::Config ブロックの外で定義されている場合、エラーが発生します

'<module:Provisioners>': uninitialized constant Vagrant::Provisioners::Chef (NameError)

また、実行ブロック内でモジュールを宣言すると違いが生じる理由がわかりません。

4

2 に答える 2

1

条件付きでモジュールを定義します。ブロックは必ずしも実行されるとは限らないことに注意してください。決定するのはターゲット メソッド次第です。

あなたの特定の例は完全に有効な Ruby ですが、そのようなものを整理すると混乱を招く可能性があります。わかりやすくするために、ブロックの外側で定義したほうがよいでしょう。

于 2012-10-03T17:24:12.120 に答える
0

とりわけ、モジュールは、変数と定数に新しい名前空間を提供するのに役立ちます。それが理由だったと言えます。

于 2012-10-03T14:14:39.357 に答える