同じディレクトリにある他の.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 - 虎塚