load(require)ってどういうことになってるのかな?
requireとloadの違い
requireは拡張子(.rb)を付けなくてもよい。loadは付けないとだめ。
requireは1回ロードされると2回目以降はロードされない。loadは毎回ロードされる。
loadは上書き?
Classをrbファイルに書いてそれを修正しつつ、動作をコンソールで確認するということをやってたんだけど、修正してload、また修正してloadだとなんか挙動が変だ。こんなので試してみる。
#loadtest1.rb class LoadTest def hello; p "Hello-1"; end def hello1; p "HELLO-1"; end end
#loadtest2.rb class LoadTest def hello; p "Hello-2"; end def hello2; p "HELLO-2"; end end
C:\ruby>irb -Ks irb(main):001:0> load "loadtest1.rb" #最初のload => true irb(main):002:0> (LoadTest.new).hello "Hello-1" irb(main):003:0> (LoadTest.new).hello1 "HELLO-1" irb(main):004:0> load "loadtest2.rb" #2回目のload => true irb(main):005:0> (LoadTest.new).hello #新しい方に上書き(オーバーライド)された "Hello-2" irb(main):006:0> (LoadTest.new).hello1 #古い方もそのまま使える "HELLO-1" irb(main):007:0> (LoadTest.new).hello2 #新しいのももちろん使える "HELLO-2"
メソッドは上書き?
同名のメソッドは上書き(オーバーライド)され、名前がかぶらないメソッドはそのまま使えるようだ。既存のクラスにオレオレメソッドを追加することが簡単にできる仕様なんだから、ある意味当たり前か。