デフォルトブロックはまだか!引数の話

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]

やはりきもいな.こういう場合はメソッドを分けて実装しろということか.