@で始まる変数を使うときの注意

tips_plugin_instance_variables

プラグインは他のプラグインも含めて1つのクラス(というかインスタンス)を形成します。したが って、@で始まるインスタンス変数は他のプラグインからもアクセスできてしまうことになります。 そこで、以下のような注意が必要です。

名前を上手につける

例えば、以下の例で、hoge1からの結果を1と期待していると(プラグインはアルファベット順に読み込まれる)実際は2が返されてしまいます。

このように、プラグインではいつどのようなものが後から追加されるか分からないのでインスタンス変数にはなるべく重複しないような名前を選ぶ必要があります。

そこで例えば、@付きの変数についてはファイル名をプレフィクスにつける等にするとかなりの確率で問題を回避できます。上の例で言えば、 @hoge1_hoge, @hoge2_hogeです。

あるいは、Moduleを使う方法もあります。こちらはtips_plugin_use_moduleで触れます。

#hoge1.rb
@hoge = 1
def hoge1
  @hoge
end

#hoge2.rb
@hoge = 2

もちろん、なるべく無用なインスタンス変数を使わずにメソッドローカルな変数を(@なし)を使うように心がけるというのは言うまでもありません。

tDiaryが提供するインスタンス変数は上書きしない

プラグインにはデフォルトで@cgi, @mode, @cache_path等々のインスタンス変数が提供されます(詳しくはtDiary標準添付のHOWTO-make-plugin.htmlを参照)。くれぐれも、これらを上書きしないようにしてください。例えば、以下のようなコードはNGです。

#hoge1.rb
@mode = "test" if @mode == "latest"

#hoge2.rb
if @mode == "latest"    #実際は"test"になっているのでこのif文には入らない
       :
       :

例えば、あなたが、hoge1.rbを作っていたとすると、hoge2.rbで全く予期しないエラーに悩まされることになります。

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