3章 その12 irbのloadとrequire

3章では、hcluster関数(http://d.hatena.ne.jp/shokai/20081112/1226473410)の処理がMacbookだと3分ぐらいかかるので、何度もやりたくない。
でもhcluster関数で作った階層的クラスタをビジュアライズする処理は何度も試行錯誤したいので、irbのloadし直しを使う。


ためしに user.rb を作る。nameというプロパティだけを読み書きできるだけのクラス。

class User
  def name=(value) # setter
    @name = value
  end
  
  def name # getter
    return @name
  end
end


irbでuser.rbを読み込む

> require 'user.rb'
=> true
>> u = User.new
=> #<User:0x69e5ec>
>> u.name = 'shokai'
=> "shokai"
>> u.name
=> "shokai"

ちゃんとプロパティを読み書きできているのを確認。まだirb終了しないで置いておく


user.rbを少し書き直す。getter関数だけ少し変更した

class User
  def name=(value) # setter
    @name = value
  end
  
  def name # getter
    return @name + '1234' # 末尾に適当な文字列を追加
  end
end

irbに戻って、user.rbを再読込する

>> load 'user.rb'
=> true
>> u.name
=> "shokai1234"

nameプロパティへgetterでアクセスすると、nameプロパティの中身は書き換わっていないが関数だけ書き換わっている。
この時、新しくUserクラスのオブジェクトを作り直したわけでもないのに、関数の処理内容だけ書き換わっているのが面白い。オブジェクトはそのままで必要な関数だけどんどん編集できる。



ちなみに、loadは何度でも再loadできるが、requireは2回目以降はfalseになり失敗する

>> require 'user.rb'
=> false