同じディレクトリにある他の.rbファイルの読み込み方
昨日なんだか雑なことを書いていたけど、
拡張子を書かなくても動いたけど、書いた方がよいのかどうか不明。
疑問メモ: Rubyプロジェクトのディレクトリ構造 - 虎塚
リファレンスマニュアル見るべしと言われたので、見てみたら解決しました。ありがとうございます。>finalfusionさん
Ruby ライブラリとは Ruby スクリプト (*.rb) か拡張ライブラリ (*.so,*.o,*.dll など) であり、feature の拡張子が省略された場合はその 両方から探します( *.rb が優先されます)。 省略されなかった場合は指定された種別のみを探します。
module function Kernel.#require
確認
greetingファイル(拡張子なし)
#!/usr/bin/ruby def hello() puts ("拡張子なしハロー") end
greeting.rbファイル(拡張子あり)
#!/usr/bin/ruby def hello() puts ("拡張子ありハロー") end
確認(1): 拡張子をつけて読み込む
#!/usr/bin/ruby require('./greeting.rb') hello()
実行結果
拡張子ありハロー
「greeting.rb」ファイルだけが探索されたのだと思われる。
確認(2): 拡張子をつけずに読み込む
確認用コードのrequireの引数から、拡張子を削除する。
#!/usr/bin/ruby require('./greeting') hello()
拡張子なしファイルに、拡張子をつけてみる。
mv greeting greeting.so
実行結果
拡張子ありハロー
結果が同じになってしまうので、あまり良い確認方法じゃないですね。
だけど、今度はRubyスクリプトと拡張ライブラリの両方を探しに行って、結果として.rbファイルが優先されたハズ。
(追記 2015/01/15)この記事の続き。Rubyのrequireとrequire_relative - 虎塚