メソッド名と同じローカル変数がある場合はローカル変数が優先される - ’(rubikitch wanna be (a . lisper)) binding - I like Ruby too. これはfooがすでにローカル変数として宣言されているからそっちが優先された話でしょう。 foo.instance_eval { foo } # => # foo.instance_eval{ defined? foo } # => "local-variable" foo.instance_eval{ defined? bar } # => "method" 最初見たとき理解不能だった。 え、instance_evalってレシーバのコンテキストで評価されるんじゃないの?( ゚д゚) なんで、外側のスコープにあるfooが見れるの??? で、調べてみると。 instance_eval - Rubyist