yarv-dev:859
From: sheepman <sheepman sheepman.sakura.ne.jp>
Date: Mon, 13 Feb 2006 21:53:26 +0900
Subject: [yarv-dev:859] open> super in define_method
こんばんは、sheepman です。 [yarv-dev:729] で、ささださんは > define_method の中で zsuper をするのは > 勘弁してもらいたいところではあります。 と書かれていますが、とはいえ、以下のようにすると、 super が ruby-1.9 と違う振る舞いをします。 memoize http://raa.ruby-lang.org/project/memoize/ というライブラリを yarv で動かしてみて見つけました。 このライブラリは define_method の中で super を呼んでいます。 $ cat t.rb class A def m_a p "m_a" end end class B < A def def_m_a B.class_eval %{ define_method(:m_a) do super end } end end b = B.new b.def_m_a b.m_a $ ruby-1.9 -v t.rb ruby 1.9.0 (2006-02-09) [i686-linux] "m_a" $ ./miniruby -v t.rb ruby 1.9.0 (2006-02-09) [i686-linux] YARVCore 0.3.3 (rev: 394) [opts: ] (eval):3:in `method_missing': undefined method `def_m_a' for #<B:0x40297190> (NoMethodError) from (eval):3:in `block (2 levels) in def_m_a' from t.rb:19:in `<main>' -- sheepman / TAMURA Takashi sheepman sheepman.sakura.ne.jp http://sheepman.parfait.ne.jp/ -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
-> 859 2006-02-13 21:53 [sheepman sheepman.sa] open> super in define_method 861 2006-02-13 23:08 ┗[ko1 atdot.net ] fixed> Re: open> super in define_method 914 2006-02-17 19:24 ┗[sheepman sheepman.sa] open> super in define_method when called twice 922 2006-02-18 01:29 ┗[ko1 atdot.net ] 923 2006-02-18 02:50 ┗[ko1 atdot.net ] fixed> Re: open> super in define_method when called twice