[ruby-dev:49319] [Ruby trunk - Bug #2402] super in instance_eval
From:
nobu@...
Date:
2015-10-30 03:21:28 UTC
List:
ruby-dev #49319
Issue #2402 has been updated by Nobuyoshi Nakada.
Description updated
----------------------------------------
Bug #2402: super in instance_eval
https://bugs.ruby-lang.org/issues/2402#change-54647
* Author: Shugo Maeda
* Status: Closed
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* ruby -v: ruby 1.9.2dev (2009-11-24 trunk 25909) [i686-linux]
* Backport:
----------------------------------------
`instance_eval`のブロック内で`super`を呼ぶと、`instance_eval`で変更された
`self`に対して`super`の呼び出しを行ってしまうようです。
~~~ruby
defiant:build$ cat t.rb
class Foo
def foo
p self
end
end
class Bar < Foo
def foo
x = Object.new
x.instance_eval do
super
end
end
end
Bar.new.foo
~~~
~~~
defiant:build$ ./ruby-trunk.1124 -v t.rb
ruby 1.9.2dev (2009-11-24 trunk 25909) [i686-linux]
#<Object:0x8590f6c>
~~~
`Foo#foo`が呼ばれるのに`self`が`Object`という、ちょっとおかしなことになっています。
ちょっと自信がありませんが、一応パッチを添付します。
---Files--------------------------------
super_in_instance_eval_fix.diff (2.03 KB)
--
https://bugs.ruby-lang.org/