4

デフォルトのパラメータで特定のコードのにおいがするのを見てきました。これは、メソッドのパラメーターの 1 つにデフォルト値が設定されているが、呼び出し元がnil値を渡さずに渡す場合です。ほとんどの場合、これは呼び出し元がハッシュを持っていて、ハッシュから特定の値を渡そうとするためです。具体的には:

def foo(params)
  ...
  bar(params[:first], params[:second]) # :second doesn't exist
end

def bar(first, second = 2)
end

2 番目のパラメータ tofooはデフォルト値ではなく になりnilます。これが処理されるのを私が見た最も一般的な方法は、関数バー内の最初の行が次のようになっていることです。

second ||= 2 

これを処理するより良い方法はありますか?つまり、nilparam が渡されるか渡されない場合は常に、デフォルト値を割り当てます。

4

1 に答える 1

9
def bar(first, second = 2)

引数を省略した場合に設定secondします。は意味のある値であるため、引数の値として渡すことで、明示的に であることを伝えています。これは意図的なものなので、必要に応じてデフォルトをオーバーライドできます。2nilnilnilnil

引数が省略された場合にデフォルトを割り当てるようにしたい場合はnil、それ||=を行う慣用的な方法です。

def bar(first, second = nil)
  second ||= 2
  puts second
end

bar 1      #=> 2
bar 1, 3   #=> 3
bar 1, nil #=> 2

second = nil引数を省略でき、デフォルトの が割り当てられますnil。引数が のnil場合は、実際のデフォルトに設定できます。これは、引数を渡すことnilと引数を省略することは、本質的に同じことを意味します。

デフォルトの引数を に置き換えたい場合があるため、このように普遍的に動作するわけではありませんnil。そして、デフォルトの引数が機能する方法により、まさにそれが可能になります。

于 2013-08-10T00:27:35.490 に答える