rubyでメソッドの引数にデフォルト式を渡したとき、その引数が省略されたかどうか知る一番よい方法はなんだろう。
ふつうに
class TheClass
def the_method(a = nil)
if a.nil?
do_something
else
do_something_with a
end
end
end
ってやると、引数が省略されたのか、nilがわたされたのか、区別がつかない。
class TheClass
def the_method(a=(val = :marker))
if val == :marker
do_something
else
do_something_with a
end
end
end
ってやれば区別はつくけど、なんかトリッキーだ。
基本は「引数が省略されたかどうかを知らなくて良い」設計にするのが筋ではないかと。
みたいなのもできますが。