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