From: "NAKAMURA, Hiroshi" Date: 2000-02-22T12:48:44+09:00 Subject: [ruby-dev:9267] Re: private class/module (Re: Re: class variable) なひです. > From: "Yukihiro Matsumoto" > Sent: Thursday, February 17, 2000 5:27 PM > | 定数というか内部クラス/モジュールを private/protected にしたく > |なることがあるんですがなにか方法ありましたっけ。それと外部に対し > |ては見えないけれど囲んでいるクラスからは見えるようなスコープとか > > 私も以前考えたことがあるのですが、そのときの結論は「見えても > 気分が悪いだけ、本質的には変わらない」というものでした。イン > スタンス変数が見えないことや、メソッドをprivateにできること > とは効果が違うように思います。 なひも以前に「できないんでしょうか?」とねじ込んだことがあります. なひが困ったケースは, 実装に依存してインタフェイスが変わる可能性がある内部クラス 外に公開する(が,その名前空間の中に残したい)内部クラス の区別が「コードのみでは」できなかったことです. # ドキュメントに書けばいいんですけどね. ライブラリを作っていて,前者を他人に使われてしまうと, アップデートの際に互換性がなくなる可能性がある,と. class MyParser class Token attr_reader :myLength end class State attr_reader :stateful? end def getToken() ... end end p = MyParser.new( STDIN ) t = p.getToken() emptyToken = MyParser::Token.new() p t.myLength == emptyToken # ここまでは許したい state = MyParser::State.new() # MyParser::StateはMyParserの中で使う # 実装依存な非公開インタフェイスなのでこれは嫌. ただしRubyでは「その気になったらなんでもできる」というのも 利点だと思うので,この辺はバランス次第なのかもしれません. # と,自分を納得させてます.^^;