[#45637] [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

14 messages 2012/05/16

[#45670] [ruby-trunk - Bug #6479][Open] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる — "kachick (Kenichi Kamiya)" <kachick1+ruby@...>

9 messages 2012/05/22

[ruby-dev:45612] Re: [ruby-trunk - Bug #6396][Open] instance_eval内での変数の扱いについて

From: Nobuhiro IMAI <nov@...>
Date: 2012-05-03 12:08:44 UTC
List: ruby-dev #45612
いまいです。

From: uy (西行寺 うゆ) <redmine_at_ruby-lang.org>
Date: Thu, 3 May 2012 20:39:09 +0900

> o.instance_eval do
>   p x #=> 99
>   if nil
>     x = 2 # この記述があるとxがnilになる
>   end
>   p x #=> nil
> end
> 
> 
> これはバグでしょうか?

(最初の) x はメソッド呼び出しなので、以下でも再現します。

def x
  99
end

p x # => 99
if nil
  x = 2
end
p x # => nil

上の p x の x はメソッド呼び出しですが、実行されなくても x = 2 の行を通
過すると x は(初期化されていない)ローカル変数になってしまうので、下の
p x の x はローカル変数になっています。

元のコードだと、以下のように self を明示すると 99 が見えますね。

o.instance_eval do
  p x # => 99
  if nil
    x = 2
  end
  p self.x # => 99
end
--
Nobuhiro IMAI <nov@yo.rim.or.jp>
Key fingerprint = E57F 2482 4074 13BC 3B9A  165B C689 5B16 A620 4657

In This Thread