5

Rubyに次のメソッドがある場合:

def foo(arg1, arg2 = "bar")
  puts arg1
  puts arg2
end

ユーザーがメソッド内で値を渡したかどうかを判断する方法はありarg2ますか? 明らかにif arg2 == "bar"、メソッドに追加することもできますが、これは、ユーザーが手動で自分自身を渡したケースをキャッチしません"bar"。もちろん、デフォルトをどのユーザーも渡さないものに設定することもできますが、そうするとすぐに見苦しくなってしまいます。

そこにエレガントなものはありますか?

4

5 に答える 5

3
def foo(*args)
  case args.length
  when 1
    # arg2 was not given
    arg1, arg2 = args.first, "bar"
    ...
  when 2
    # arg2 was given
    arg1, arg2 = args
    ...
  else
    raise ArgumentError
  end
end
于 2013-10-20T00:11:22.960 に答える