From ruby-ext-admin@netlab.co.jp Mon Nov 29 13:10:49 1999 Received: from voscc.nagaokaut.ac.jp (voscc.nagaokaut.ac.jp [133.44.1.100]) by blade.nagaokaut.ac.jp (8.8.8/8.8.8/Debian/GNU) with ESMTP id NAA18981; Mon, 29 Nov 1999 13:10:49 +0900 Received: from hoyogw.netlab.co.jp (matz@localhost [127.0.0.1]) by hoyogw.netlab.co.jp (8.9.3+3.2W/3.7W/1.3) with SMTP id NAA30137; Mon, 29 Nov 1999 13:08:21 +0900 Date: Mon, 29 Nov 1999 13:07:55 +0900 From: ymsd Reply-To: ruby-ext@netlab.co.jp Subject: [ruby-ext:00587] unexpected local variable To: ruby-ext@netlab.co.jp (ruby-ext ML) Message-Id: <9911290407.AA00008@hikaru.mail.m-net.ne.jp> X-ML-Name: ruby-ext X-Mail-Count: 00587 X-MLServer: fml [fml 2.2]; post only (only members can post) X-ML-Info: If you have a question, send a mail with the body "# help" (without quotes) to the address ruby-ext-ctl@netlab.co.jp; help= X-Mailer: AL-Mail 1.32 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Precedence: bulk Lines: 63 はじめまして。 ymsdと申します。 いきなり長文で失礼いたします。 BeOSのGUIを扱うための拡張ライブラリをつくろうとして 苦しんでいる者です。 WindowなどのGUI部品を表示するだけなら簡単に実現したのですが、 それらから処理が戻ってくるところでつまづいています。 (Gtkでいえば、signal_connectのところ) たとえば、Windowオブジェクトを win = BWindow.new(...) のように生成して、Windowがメッセージ(Gtkでいえばシグナル) をうけとった時の動作を、特異メソッドを使って def win.message_received(msg) case msg when A when B ... else self.back_to_parent(msg) end end のように記述したいのです。 この、最後のback_to_parentというのは、知らないメッセージ (や、このオブジェクトでは処理したくないメッセージ)が きたときは、windowの親クラス(BeOSのAPIでの話)のメソッド を呼び出して処理をするというものです。 (これはBeOSのAPI(C++で書かれている)では一般的な手法なのです。) ところが、ここまで処理がくると、 [BUG] unexpected local variable というメッセージが出てとまってしまいます。 rubyのソースを(わからないながらも)みると、 これはどうやら、eval.cが出しているメッセージで 変数のスコープに関係があるらしいとは思うのですが、 その意味するところはまったく理解できていません。 抽象的な質問で申し訳ありませんが、 ・どなたか、拡張ライブラリをかいていてこのエラーが出た人は いらっしゃいますか?そのときはどのように対処なさいましたか? ・一般にこのエラーはどういうときにおきるのでしょうか? 何に気をつければ回避できるのでしょうか? ・このエラーをrubyスクリプトだけで発生させることはできるでしょうか? ・特異メソッドを定義するとそのオブジェクトのもともとのクラス の下に特殊なクラスがはさまれるということと何か関係があるのでしょうか? ・例外と[BUG]の違いは何でしょうか? 以上、なにかヒントになるようなことがありましたら、よろしく おねがいいたします。 また、BeOSで同じようなことをしようとしているかたが いらっしゃいましたら情報交換させていただければありがたいのですが (はたしてBeOSでrubyな人って何人くらいいるんだろうか...) -- Masuda Yuichi ymsd@m-net.ne.jp