[ruby-list:50631] Re: instance_evalで定数が見えない

From: Yukihiro Matsumoto <matz@...>
Date: 2017-12-29 00:51:31 UTC
List: ruby-list #50631
まつもと ゆきひろです

定数の参照はレキシカルに決定されますので、instance_evalなど
では変化しません。


In message "Re: [ruby-list:50630]	instance_evalで定数が見えない"
    on Fri, 29 Dec 2017 03:24:26 +0900, MASAKI Haruka <yek@reasonset.net> writes:
>
>正木です。
>
>Ruby 2.2のときにも言及したのですが、2.5でも変わっていないので再度お聞かせ下さい。
>インスタンスの特異クラス内では見えるクラスの定数が、instance_evalでは見えません。
>
>これは然るべき挙動なのでしょうか。
>
>***
>コード:
>
>class ClassA
>  CONST="Hello"
>end
>
>obj = ClassA.new
>
>class <<obj
>  def hi1
>    p CONST
>  end
>end
>
>obj.instance_eval do
>  def hi2
>    p CONST
>  end
>end
>
>
>結果:
>
>"Hello"
>Traceback (most resent call last):
>        1: fron instance_eval_test.rb:20:in `<main>'
>instance_eval_test.rb:15:in `hi2': uninitialized constant CONST (NameError)
>***

In This Thread