module A B = 42 def f 21 end end A.module_eval do def self.f p B end end B = 15 A.f
こちらのコードですが出力結果が「15」になりますがなぜそうなるのかがわかりません。
「A.module_eval do ~ end」では
「Aモジュールの特異メソッドf」が定義されてると思います。
Aモジュールの元の中身は
module A B = 42 def f 21 end end
なので
「A.f」で出力されるのは"42"だと思ったのですが、なぜ15になるのでしょうか?
module A # ①モジュールAの定義 B = 42 # ②モジュールAに定数Bを定義。Bに42を代入してる。 def f 21 end end A.module_eval do # ③モジュールAに特異メソッドfを定義 def self.f p B # ④42が出力 end end B = 15 A.f
このような考えになってます。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。