From: matz@... (Yukihiro Matsumoto) Date: 1997-07-29T11:49:06+09:00 Subject: [ruby-dev:12] Re: [Problem] for local class まつもと ゆきひろです In message "[ruby-dev:8] [Problem] for local class" on 97/07/29, Keiju ISHITSUKA writes: | |けいじゅ@フリーももうすぐ終り(;_;です. | |# そういえば松本氏もだね. 厳密にいうと私は今月フリーだったわけではなくて有給使って休ん でいただけです.長い休みが今週で終ってしまうのは事実ですけど. # で,引っ越しの荷物はまだ片付いていないのだ. |# ただ, Subjectが... Re:がいっぱい(;_; [ruby-list:xxxx]を削ってくれないからですね.両方にまたがる時 には手動で削るしかないですね. |さらに, rubyの場合は, トーカルクラスコンテキストとサブクラスコンテクス |トが両方ともこういう感じになっていますよね. つまり: トーカルってなに? rubyの定数スコープのルールは結構変わっていて, * 自クラスで定義された定数があればそれ * 外のスコープ(自分を囲むmoduleまたはclass)で定義された定 数があればそれ * 自分の先祖(またはincludeされたモジュール)を優先順位順に 検索して,どこかで定義されていればそれ * いずれにしても値はできるだけ静的に決定する という風になっています. 既に書きましたが, * サブクラスでスーパークラスの定数を置き換えることを認める かどうか ということをまず決めたいです.現状では(-wオプションが指定さ れている時には)警告を発生するものの置き換えは出来るようになっ ています.今回,つらつらと考える限り,置き換えることに対する 不都合はあまりないようなので,警告も発しなくてよい(正当な操 作と認める)で,よいように思えて来ました. 次に,クラスの再定義の挙動を定義する必要があります.これも石 塚さんのおっしゃるように定数の挙動に合わせても良いような気が して来ています. それは別に * なんらかの方法で定数の値が動的に変更された時(eval/定数定 義API/includeなど),どのように挙動すべきか という点を定義する必要があります.実は現在のrubyは定数の値は 変更されないものと思って,一度評価するとその定数値を構文木に 取り込んでしまいます.つまり,現在の実装では定数の値が動的に 変更されてしまうと,実行順によって定数の値が異なってしまう場 合があるというわけですね.これは多分まずい挙動なので,適切な 動作をきちんと定義しないといけないでしょう. |>Object::Fooじゃだめ? |# ただ, (同名ローカルクラスが許されたとして)ローカルクラスでObjectがあ |# ると困るかな... Objectだけは, 再定義しちゃ駄目といえば済むかな... それは自業自得ということで. まつもと ゆきひろ /:|)