ライブラリにサンプルを書く上手いやり方
Rubyのライブラリで、たまに次のようなコードが最後に付いているソースを見かけます。
... ライブラリの実装(省略) if __FILE__ == $0 ... ライブラリのサンプルコードらしきもの end
何かと思ったのですが、こうしておくと
- ライブラリがrubyで直接実行された場合のみ、サンプルコードを実行
- 「require」等で読み込まれた場合は、実行しない
というふうにできるみたいです。
- 疑似変数の「__FILE__」は現在実行しているプログラムのパスを返します。requireしたソース内で実行すると、「requireしたソースのパス」となります。
- 組み込み変数「$PROGRAM_NAME($0も同じ)」は、現在実行中のRubyスクリプトの名前を返します。requireしたソース内で実行してもメインプログラムのパスを返します。
- なので、「__FILE__ == $0」がtrueになるのは、ライブラリがrubyで直接実行された場合のみになります。
これで、手軽に実行できる && ライブラリとして利用する場合実行しない、というサンプルの用件をスマートに満たせる訳です。なるほどー。