From: matz@... (Yukihiro Matsumoto) Date: 1997-12-21T23:02:54+09:00 Subject: [ruby-list:5743] Re: ruby 1.1b2 released まつもと ゆきひろです In message "[ruby-list:5741] Re: ruby 1.1b2 released" on 97/12/20, Yukihiro Matsumoto writes: |「継承しない」とは誤解を受けやすい表現ですが,「継承しない」 |のはvisibilityであって,メソッドを継承しないわけではないです. |つまり,functionメソッドはprivateメソッドと同様に動作します |が,サブクラスで再定義した場合,privateメソッドと違って自動 |的にはprivateにならず,そのvisibilityはpublicになります. | |菊谷さんが以前引っかかった「selectがprivateだから,サブクラ |スでもselectがprivateになって呼べなかった」という問題に対す |る回答です. とはいうものの,この機能に関するドキュメントを書きながら考え たのですが,これはやっぱり複雑すぎて良くないようです. で,functionはなくしてしまって,以下のいずれかにしようと思い ます.1.1b2をお使いの方はModule#functionを使わないようにして 下さい. (1) visibilityの継承はなくす.visibilityのデフォルトはトッ プレベルではprivate,クラス定義内ではpublicとする. (2) 定義されるメソッドのvisibilityをクラス毎に設定できるよ うにする.以前の原さんのリクエストに対する答えにもなる. 問題は複数スレッドで同時にメソッドを追加するようなこと があれば(それはもともと望ましくないにしても),混乱が発 生すること. 例: 引数なしのprivateで設定する class Foo def foo ... end private # ここからはprivate def bar ... end end (3) 上記と同じだが,実行時のメソッドによって指定するのでは なく,予約語を追加する.予約語が増えるのはちょっといや. 例: C++流のprivate:で指定する class Foo def foo ... end private: # ここからはprivate def bar ... end end (4) その他 まつもと ゆきひろ /:|)