デフォルトブロックはまだか!引数の話
def f(&b=proc{|x| x }) b end
予想はしてたけど,こんな感じのことはどうやら書けない.
-:1: syntax error, unexpected '=', expecting ')' def f(&b=proc{|x| x }) ^
そこで,こうした.
def f(&b) b ||= proc {|x| x } end
引数といえば,引数が0個の時と1つの時で挙動を変えたい時も困る.
def g(x=nil) x end
みたいにすると,nilが渡されたのと引数がないことを区別できない.rest引数を使えばできるけど,毎回長さ1の配列を生成するのはちょっと大袈裟な気がするし,引数が多すぎてもチェックされない.そこで考えたのがこれ.
def g(x=y=true) [x, y] end p g # => [true, true] p g(0) # => [0, nil]
やはりきもいな.こういう場合はメソッドを分けて実装しろということか.