そのプラグイン限定のメソッドを定義したい

tips_plugin_private_method

実はtDiaryのプラグインではいわゆるプライベートな宣言は意味をなしません。なぜなら、全てのプラグインで1つのクラス(というかインスタンス)を形成していて、1つのクラスの内部ではプライベートだろうがパブリックだろうがお構いなしにアクセスできてしまうからです。

また、ユーザからは使用させないがプログラミング上の効率から定義するメソッドというのもありますが、そのようなメソッドは先のインスタンス変数と同様に特に名前問題に注意する必要があります。

例えば、以下の例のように日記の本文中に<%= hoge1 "文字列" %>と書くプラグインを作ったとします。formatメソッドはhoge1.rbの中でしか使わない'''つもり'''のものです。しかしながら、実はhoge2.rbでも同じ宣言がされているため上書きされてしまい(プラグインはアルファベット順に読み込まれる)結果が予期しないものとなってしまいます。

#hoge1.rb
def format(v)
   "[" + v + "]"
end
def hoge1(str)
   format(str)
end

#hoge2.rb
def format(v)
   "---" + v + "---"
end

結局のところ、そのプラグインのみで使うことができる、そのファイルローカルなメソッドを作ることはできません。

そこで、@付きの変数(インスタンス変数)と同様に、ファイル名をプレフィクスにつけるようにします。完璧ではありませんが、かなりの確率で問題を回避できます。

その他に、Moduleを使う方法があり、その方法が最も効果的であると思うのでぜひ参照してください。

更新日時:2003/07/06 19:21:26
キーワード:
参照:[tDiary関係]