質問: "Constant in Module instance" def const CONST end EOS p m.const ``` 上記のコードではメソッドのconstがないというエラーがでます。 `undefined method `const' for # (NoMethodError)` これはRuby Goldの練習問題の一つで、解説には > > メソッドconstは特異クラスで定義されていないので、例外が発生します。 > > と書かれています。 > > > しかし、そもそもレシーバーはModuleクラスのインスタンスなので、呼び出しているのはModuleクラスのインスタンスメソッドで module_evalはレシーバーのクラスの中にインスタンスメソッドを作ると認識しているので、問題なく出力されると認識していたのですが、どこがおかしいのでしょうか。 よろしくお願いいたします。
回答: > > module_evalはレシーバーのクラスの中にインスタンスメソッドを作ると認識しているので > > > いえ、レシーバー**自身である**クラス・モジュールにメソッドを作成することとなります。 > > モジュールのコンテキストで評価するとは、実行中そのモジュールが self になるということです。つまり、そのモジュールの定義式の中にあるかのように実行されます。(るりまより) > > > つまり、`module_eval`内の`def const`は、`m`に対してメソッドを作成します。`Module.new`とした別のモジュールには無関係です。