From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-ext:00940] Re: how to call 'super' in C level?
Date: Thu, 02 Mar 2000 13:20:02 +0900

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

grep rb.*_super *.cしても 

eval.c:264:rb_disable_super(klass, name)
eval.c:286:rb_enable_super(klass, name)
object.c:604:rb_class_superclass(klass)

だけでした (^^;

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

今やろうとしてたのは、Ruby/Gtkで private method 'signal_setup_args()'を
付けようとしてました。

現在の Ruby/Gtk 0.23だと singnal_callback()の中で singnal_setup_args() 
が呼ばれるのですが core widgetではない widgetだと自前で一連の関数群を用
意しなければならないようです。[ruby-ext:00522]からの threadがそれです。

そこで、singnal_callback()の中で objectが持つ singnal_setup_args()を呼ん
で、もし与えられた singnalがその object特有の singnalではない場合、つま
り親クラスが処理する物の場合に superを使って signal_setup_args()を定義し
ている次の祖先?に飛びたいんです。

class GtkObject で signal_setup_args()を定義しておけば name errorも起き
なくて名案かと思ったんですけど(^^;;; どんなもんでしょう。

# 説明が下手でごめんなさい‥。
--
           yashi