機械猫の日記 - rubyって、ここでもメソッド定義できるのね
昨日の夜妙な時間に電話がかかってきたので、なんとなくブログを眺めてしまう。
で、試してみる。
# 同じメソッドを定義する。 def hoge arg=(def hoge; "foo!"; end; hoge) arg end puts hoge # foo! puts hoge(200) # foo.rb:6:in `hoge': wrong number of arguments (1 for 0) (ArgumentError)
ちょ、おまっ(汗
ええと、まてよ、もしかしてこれは・・・
puts hoge(200) # 200 puts hoge # foo!
おお。
puts hoge(100) # 100 puts hoge(200) # 200 puts hoge(300) # 300 puts hoge # foo! puts hoge(999) # foo.rb:9:in `hoge': wrong number of arguments (1 for 0) (ArgumentError)
これはつまり・・・初めて引数なしで呼ばれたときに再定義が評価されるってことだからですか。ふーん。
もしかしたら使えるんですか?(何に? 笑)
追記:・・・・
いや、考えてみたらやっぱよくわからん。どういう挙動なんすか?だれか教えて!
追記:わかったみたい
機械猫さんのコードの後半に一行追加
#再定義してみる puts nil? #-> false def hoge arg=(def nil?;"foo!";end;nil?) puts arg end puts nil? #-> false <=コレコレ hoge #-> foo! puts nil? #-> foo!
定義の後でも呼び出し前ならやっぱりfalseなんだね。
そゆことかー。なんか頭がこんがらがってたよ。