1.8.7と1.9.1の挙動クイズ
今度のは難しいぞ!
継承は関係なかったので問題を修正.
(1)
class A def initialize eval "def f() 3 end" end end p A.new.f
(2)
class A private def initialize eval "def f() 3 end" end end p A.new.f
答え
(1)ruby1.8.7
3
(1)ruby1.9.1
3
(2)ruby1.8.7
3
(2)ruby1.9.1
-:8:in `<main>': private method `f' called for #<A:0x116408> (NoMethodError)
バグじゃね?
(多分)この挙動の違いの所為でnicovideoが動かない(Nicovideo::MyList#videosとかがprotected).そもそもなんでinitializeの中でregister_getterを呼んでるのかよくわからない.
(追記)それ以前にいろいろなライブラリが1.9に対応してない気がしてきた.無理臭い.
=>それほどでもなかった.
(2009-09-21-19:40追記)evalも関係なかった.普通のdefのネストでこの違いがある.仕様変更なのかなぁという気がしないでもないけど,一度も聞いたことはないな.