[#47049] fileのopenに関する動作についての質問 — 高橋作郎 <sakurou3960@...>

はじめまして。

14 messages 2010/05/04

[ruby-list:47080] Re: [ruby-list:47079] 1.8と1.9のProc化されたブロック内の定数の違い

From: Moru <lateau@...>
Date: 2010-05-12 15:51:18 UTC
List: ruby-list #47080
モルです。
instance_evalでの働きは多分問題ないと思いますが、

extend Y

1.9ではここでNameErrorが起きてしまいますね。
extend X::Yに直せば一応解決はできますが、X::Yのように宣言はされているので、X側からYをYで参照できなくなるのは、何が原因何でしょうと。
何か変わったんですかね。

誰かご存知の方は教えてください。

--
Moru



2010/5/12 arton <artonx@yahoo.co.jp>:
> artonです。
> 以下の(相当恣意的な)スクリプトが1.8.7と1.9.1で異なる動作をするのは、意
> 図的な非互換性でしょうか?
>
> #----start
> puts RUBY_VERSION
> class X
>  module Y
>    def hello
>      puts 'hello'
>    end
>  end
>  def make_proc(&block)
>    block
>  end
>  def test
>    make_proc do
>      extend Y
>    end
>  end
> end
> x = X.new
> a = Object.new
> a.instance_eval &x.test
> a.hello
> #---end
>
> ruby-1.8.7ーp249では
> 1.8.7
> hello
> と、動きます。これが当方が期待している動作です。つまり、Yはextend Yを記
> 述した位置で評価された状態です。
> しかし、ruby-1.9.1-p378 では、
> 1.9.1
> m.rb:13:in `block in test': uninitialized constant Object::Y (NameError)
>        from m.rb:19:in `instance_eval'
>        from m.rb:19:in `<main>'
> となります。Yは、instance_evalされた時点での評価となるようです。
>
> --
> arton <artonx@yahoo.co.jp>
>
> --------------------------------------
> 2010 FIFA World Cup News [Yahoo!Sports/sportsnavi]
> http://pr.mail.yahoo.co.jp/southafrica2010/
>
>

In This Thread