[前][次][番号順一覧][スレッド一覧][生データ]

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