0

该方法的第一个版本:

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

该方法的第二个版本(注意第二个参数 2)...

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

我会假设这两种方法是等价的,因此我会选择第一种(更少的打字,更少的冗余)。

但是,我很好奇这些行为是否会有所不同,如果是这样,为什么。

4

1 回答 1

3

在第二个中,您将 设置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 回答