[#41806] Win32OLE and MATLAB — Masaki Suketa <masaki.suketa@...>
助田です。
6 messages
2006/02/03
[#41812] "module private"な変数・メソッド — KURODA Hiraku <hiraku@...>
こんにちは、黒田です。
5 messages
2006/02/04
[#41825] RRSE 0.1 — OHBAYASHI Ippei <ohai@...>
こんにちは、大林です。
5 messages
2006/02/13
[#41854] rexml で doc.xml_decl.encoding = "shift-jis" は駄目ですか? — take_tk <ggb03124@...>
たけ(tk)です
5 messages
2006/02/24
[ruby-list:41812] "module private"な変数・メソッド
From:
KURODA Hiraku <hiraku@...>
Date:
2006-02-04 04:17:25 UTC
List:
ruby-list #41812
こんにちは、黒田です。
現在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/
--------------------------------------------------