プラグインで名前空間を分ける

tips_plugin_use_module

RubyのModuleは機能をひとまとめにしておき、いろいろなクラスから呼び出す(あるいは含める)ためのものだが、単純に名前空間を分けるために使うこともできます。先ほどの2つの例(@で始まる変数(インスタンス変数)を使うときは要注意とそのプラグイン限定のプライベートなメソッドを定義したい)を合わせたようなコード例を書いてみます。

#hoge1.rb
module Hoge1
   @hoge = 1
   def format(v)
       "[" + @hoge.to_s + ":" + v + "]"
   end
   module_function :format
end

def hoge1(str)
   Hoge1.format(str)
end

#hoge2.rb
@hoge = 2        #これならこちらの影響を受けない。

def format(v)
   "---" + @hoge.to_s + ":" + v + "---"
end

もちろん、この例でもhoge2.rbでmodule Hoge1を上書きすることはできますが、なるべくファイル名と同じModuleを使うようにすれば、かなりの確率で意図していない問題を回避できますし、Module内部では自由に変数名・メソッド名をつけられるのでコード的にもすっきりします。