Ruby围绕方法定义中的参数括起来

时间:2013-02-05 08:27:09

标签: ruby

我知道很多ruby样式指南都围绕方法定义的方法参数括起来。我理解有时在语法上需要括号用于方法调用

但是,任何人都可以提供为什么Ruby 需要围绕方法定义的参数的括号的示例?基本上,我正在寻找除“它看起来更好”之外的理由。

2 个答案:

答案 0 :(得分:17)

如果你既没有括号也没有分号as pointed out in this comment,那就不明确了。

def foo a end # => Error because it is amgiguous.
# Is this a method `foo` that takes no argument with the body `a`, or
# Is this a method `foo` that takes an argument `a`? 

此外,如果要使用复合参数,则不能省略括号:

def foo(a, b), c
  p [a, b, c]
end
# => Error

def foo((a, b), c)
  p [a, b, c]
end
foo([1, 2], 3) # => [1, 2, 3]

答案 1 :(得分:-2)

另一个例子是你想要将哈希作为参数传递给

这不起作用:

MyTable.update_all { col_a: 1, col_b: 2 }

因为{}用于块而不是散列

添加parens确实有用。

MyTable.update_all({ col_a: 1, col_b: 2 })

在update_all的情况下,它最多需要3个哈希值作为参数,因此指出哪些值进入哪个哈希值非常重要。