require は繰り返すのか?
require すると、require 先のファイルも呼んでくれる
たとえば、以下のような2つのソースがある場合
# test1.rb class Test1 puts "Test1 require" def test1 puts "test1" end end
#test2.rb require 'test1' class Test2 puts "Test2 require" def test2 t = Test1.new t.test1 end end
上記のような Test2 クラスを require するプログラムを書く。
require 'test2' puts 'start' Test1.new.test1 puts 'end'
実行結果
Test1 require # Test1 クラスが読み込まれている
Test2 require # Test2 クラスが読み込まれている
start
test1 # test1 クラスのメソッドが呼ばれている
end
エラーにはならないようだ。 Test1 クラスを明示的に呼んでいなくても、Test2 を経由して require しているので問題なく使用できるのがわかった。
つまり、require の連鎖の中のどっかで require していれば明示しなくてもクラスは使えるというわけである。
ただ、どのクラスを使用しているのか? というのを明示してある方がクラス単体として成り立つ可能性が高いので、明示した方がソース読む人に優しくね? と思う。が、そうなると次の問題がある。
複数回 require されたりしないの?
というわけで、 Test1 及び Test2 はそのまま、それらを呼び出すプログラムを以下のようにして試してみる。
また、明示的に require を繰り返し呼んでどうなるのかも試した。
require 'test1' require 'test2' puts 'start' 10.times do require 'test1' end puts 'end'
実行結果は以下のようになった。
Test1 require
Test2 require
start
end