Rubyの定数の参照で質問です。
Ruby
1m = Module.new 2class Module 3 CONST = "Constant in Module instance" 4 5 def const 6 CONST 7 end 8end 9 10p m.const 11
上記のコードでは、
Constant in Module instance
が表示されます。これはわかります。
Ruby
1m = Module.new 2 3m.module_eval(<<-EOS) 4 CONST = "Constant in Module instance" 5 6 def const 7 CONST 8 end 9EOS 10 11p m.const
上記のコードではメソッドのconstがないというエラーがでます。
undefined method `const' for #<Module:0x00007fd4bf08cd20> (NoMethodError)``` これはRuby Goldの練習問題の一つで、解説には > メソッドconstは特異クラスで定義されていないので、例外が発生します。 と書かれています。 しかし、そもそもレシーバーはModuleクラスのインスタンスなので、呼び出しているのはModuleクラスのインスタンスメソッドで module_evalはレシーバーのクラスの中にインスタンスメソッドを作ると認識しているので、問題なく出力されると認識していたのですが、どこがおかしいのでしょうか。 よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/29 16:48 編集
2020/01/29 23:13
2020/01/30 10:39