2003-09-17 [長年日記]
λ. Experimental GLib TreeModel interface
gobjectのインターフェースをRubyで実装するための、Geoff Youngs さんの実験的なコード。この辺りは色々と難しい問題が山積みなので、あまり手を出したくなかったのだけど、そうも言ってられなくなってきたなぁ。
λ. g_signal_override_class_closure()
それで思い出したのは、g_signal_override_class_closure()とg_signal_chain_from_overridden()。こいつらをRubyから使えるようにすれば、シグナルのデフォルトハンドラーに関しては、Cレベルでゴチャゴチャやらなくても済むようになるはず。
素直に実装すれば
class MyButton < Gtk::Button register_type("MyButton") signal_override("clicked"){|instance, *args| puts "#{instance.inspect}.clicked" instance.signal_chain_from_overridden(*args) } end
のように使う事になると思うのだけど、出来ればdefine_methodのようにinstanceのコンテキストでブロックを実行するようにして、
class MyButton < Gtk::Button register_type("MyButton") signal_override("clicked"){|*args| puts "#{self.inspect}.clicked" signal_chain_from_overridden(*args) } end
と書けるようにしたいところだ。やり方が分からないけど (^^;)
λ. Javaバイトコード処理系の作り方, 首藤 一幸
を読んだ。だいありー(2003-09-17)より。
λ. Phantasm初クリア
Phantasm初クリア。使ったのは咲夜(時符)。「人間と妖怪の境界」から先が全然だめ。ボムの多い咲夜を使っててよかった (^^;
λ. 借りた本
- 『グリーン・マイル (2) -- 死刑囚と鼠』
- スティーヴン キング (Stephen King) [著], 白石 朗 [訳]
- 『数学の不思議な旅 — ピュタゴラスの定理から超数学まで』
- A.K. デュードニー (A.K. Dewdney) [著], 好田 順治, 小野木 明恵 [訳]
- 小説すばる 2002年10月号
- -
λ. 買った本
- 月刊「現代」 10月号
- -
単にinitializeとかで実行すれば良いってことではない?<br><br>class MyButton < Gtk::Button<br> register_type("MyButton")<br> <br> def initialize<br> super<br> signal_override("clicked"){|*args|<br> puts "#{self.inspect}.clicked"<br> signal_chain_from_overridden(*args)<br> }<br> end<br>end
いや、g_signal_override_class_closure()はGTypeに対するオペレーションですので、initializeで実行するのはまずいです。(同じGTypeについて複数回呼び出すとエラーになります)<br><br>void g_signal_override_class_closure (guint signal_id,<br> GType instance_type,<br> GClosure *class_closure);