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

From: MASAKI Yuhsuke <yek@...>
Date: 2017-12-29 09:29:31 UTC
List: ruby-list #50633
まつもとさん、ご回答ありがとうございます。

なるほど、クラスの定数もクラスに属しているわけではないのですね… 
ありがとうございます。


You wrote:
> まつもと ゆきひろです
> 
> 定数の参照はレキシカルに決定されますので、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