From: matz@... (Yukihiro Matsumoto) Date: 1999-07-30T02:24:51+09:00 Subject: [ruby-dev:7479] Re: constant in class_eval{} まつもと ゆきひろです In message "[ruby-dev:7478] constant in class_eval{}" on 99/07/30, Inaba Hiroto writes: |ruby-listの「クラス定数について」のスレッドで、class_evalでブロックを |与えた時にスーパークラスで定義された定数がアクセスできない事を書いたの |ですが、忘れられてしまったようです。文字列の評価の時ならできるのですが。 完璧に忘れてました。ごめんなさい。 |man-1.3を見るとclass_evalではクラス定義の中と同様な評価がされるという事 |が述べられているのでこれが正しいとすればバグであると思います。 です。 |そこで、難解なeval.cと格闘して以下のパッチをでっちあげました。 実際にはブロックの評価中に例外が発生してruby_block中のcbase が変更されたままになるのを避けるために PUSH_TAG()/POP_TAG() でくくる必要がありそうですね。 |こんな修正でいいかどうか全く自信がありません。どうでしょうか? 基本的な部分はこれで大丈夫だと思います。 |# RubyのソースってPerlよりコメントがない気がする... ないですねえ。自己分析すると * コメント書くのが面倒臭い * Perlよりソースが分かりやすいのでコメントは不要 * ソースを読めば分かる * 私以外の人はソースを読まないだろう と思っているからではないかと。最近は成立しなくなってきている ようですが。 まつもと ゆきひろ /:|)