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

はじめまして。

14 messages 2010/05/04

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

From: arton <artonx@...>
Date: 2010-05-12 14:04:13 UTC
List: ruby-list #47079
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

Prev Next