まつもと ゆきひろです

In message "[ruby-ext:00939] Re: how to call 'super' in C level?"
    on 00/03/01, Yasushi Shoji <yashi / yashi.com> writes:

|> 「スーパークラスのメソッドを実現している関数を直接呼ぶ」とい
|> うのが現状可能な方法です。
|
|う‥、superみたいな便利なものはないのですか‥‥。

現状ではないですねえ。rb_call_super()という関数を以前見たこ
とがあるような気もしますが... ^^;;;

|ちょっと考えたんですけど
|
|Class Base
|  def hoge
|    print "This is Base\n"
|  end
|end
|
|Class A < Base end
|
|Class B < A
|  def hoge
|    print "This is B\n"
|    super
|  end
|end
|
|と言う風に B < A < Base と class達があって
|
|B.new.hoge とすると superはちゃんと Base#hogeを探してくれますよね?
|
|これを C levelでやるとなると class Bの hogeの最後で rb_mod_ancestors()を
|使って arrayをとりだして、下から順番に hogeが defineされてるか探していく
|しか方法がないと思うのですが当ってますか?

動的に考えるとその通りですね。しかし、Rubyでは動的にクラスが
変更されることはほとんどないので(とくにCで定義したクラスは)、
静的なクラス構成だけ考えればよろしいのではないかと思います。
ということは、わざわざ動的にスーパークラスのメソッドを探して
実行する関数は必要ないのではと。

                                まつもと ゆきひろ /:|)