From: KURODA Hiraku Date: 2006-02-04T13:17:25+09:00 Subject: [ruby-list:41812] "module private"な変数・メソッド こんにちは、黒田です。 現在Rubyでは、モジュールの中で定義されたメソッドは、そのモジュールを includeしたクラスからは無制限に呼び出せます(よね?(汗 これを、同じモジュールで定義されたメソッドからしか呼べないように制限する 手法って何かないでしょうか? 例えば、オブジェクトを何らかの条件に応じた形式でファイルに保存する為のモ ジュールを、以下のように作るとします。 module Dumper def dump open("file", "w") do |f| # @f = f としたい case hoge # オブジェクトの条件で場合分け when fuga1 # 形式1で保存 private1(f) #private1 とパラメータなしで呼びたい when fuga2 # 形式2で保存 private2(f) #private2 とパラメータなしで呼びたい end end end def private1(f) fに形式1で保存 #@f を使って保存したい end def private2(f) fに形式2で保存 #@f を使って保存したい end end このモジュールを適当なクラスでincludeすると、private1, private2も (include元のクラスから呼べる必要がないのに)呼べてしまいます。 このような"モジュールの中だけで使えれば良いメソッド"を、include元のクラ スから隠す方法って何か確立されてないでしょうか? またこの話のインスタンス変数版のような話なのですが、例えば先の例では、変 数 f をメソッドのパラメータとして渡しています。 これを、モジュールの中からしか見えないインスタンス変数のようなものに代入 して、別のメソッドから参照する方法はないでしょうか? 実際に @f 等とした変数に f を代入してしまうと、呼び出し元クラスで @f を 使ってたら動作がおかしくなるのではないかという懸念があって、モジュール内 では@変数を(モジュール内だけで使いたい変数としては)使えずにいます。 以上、よろしくお願いします。 -- -------------------------------------------------- 黒田 拓(くろだ ひらく) hiraku@hinet.mydns.jp http://www.hinet.mydns.jp/~hiraku/ --------------------------------------------------