0

メソッドの最初のバージョン:

def method(param1, param2={})
  meth_x(param2).meth_y(param1)
  meth_z
  #...
end

メソッドの 2 番目のバージョン (2 番目の param2 に注意してください)...

def method(param1, param2={})
  meth_x(param2={}).meth_y(param1)
  meth_z
  #...
end

これら 2 つの方法は同等であると想定しているため、最初の方法を使用します (タイピングが少なく、冗長性が少ない)。

ただし、これらの動作が異なると予想されるかどうか、またそうである場合はその理由が知りたいです。

4

1 に答える 1

3

2 番目の例でparam2は、 にパラメーターとして渡す前に、 を空のハッシュに設定しますmeth_x。メソッド定義でparam2 = {}は、パラメータが省略された場合、このデフォルトの空のハッシュに設定されることmeth_x(param2 = {})を意味しますが、param2 の元のコンテンツを削除して空のハッシュに置き換え、それを に渡すことを意味しmeth_xます。

irb(main):001:0> a = {:alma => 2}
=> {:alma=>2}
irb(main):002:0> puts a
{:alma=>2}
=> nil
irb(main):003:0> puts(a)
{:alma=>2}
=> nil
irb(main):004:0> puts(a = {})
{}
=> nil
于 2013-05-14T14:23:43.810 に答える