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"

メソッドは上書き?

同名のメソッドは上書き(オーバーライド)され、名前がかぶらないメソッドはそのまま使えるようだ。既存のクラスにオレオレメソッドを追加することが簡単にできる仕様なんだから、ある意味当たり前か。