在方法调用中使用括号的规则是什么?

时间:2015-09-24 08:13:39

标签: ruby

在调用方法时,我无法在下列情况下省略括号:

t=[]
t.push {}
# => []  # I expected [{}]
t.push({})
# => [{}] 

我应该采用哪些规则来避免这种情况?

3 个答案:

答案 0 :(得分:7)

当您传递{}作为唯一参数时(因此调用中没有逗号),Ruby无法判断您是否表示空哈希或空块,因此您需要使用括号来区分它:

t.push(){}
t.push({})

在其他情况下,正确的经验法则是,如果直接使用方法调用作为参数,则需要使用括号。

method arg0, arg1, other_method(arg01, arg02), arg2, arg3

当您的方法调用更加嵌套时,最好使用局部变量(或重新考虑您的接口)来备用方法调用,即

arg3 = other_method arg01, arg02
methods arg0, arg1, arg3, arg3, arg4

答案 1 :(得分:2)

您可以从<<切换到push以避免此陷阱

t = []
t << {}

答案 2 :(得分:0)

当你这样写作时:

t.push {}

Ruby将转化为:

t.push() {}

push方法没有参数和块