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

JCL*_*CLL 8 ruby

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

t=[]
t.push {}
# => []  # I expected [{}]
t.push({})
# => [{}] 
Run Code Online (Sandbox Code Playgroud)

我应该采用什么规则来避免这种情况?

Bor*_*nho 7

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

t.push(){}
t.push({})
Run Code Online (Sandbox Code Playgroud)

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

method arg0, arg1, other_method(arg01, arg02), arg2, arg3
Run Code Online (Sandbox Code Playgroud)

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

arg3 = other_method arg01, arg02
methods arg0, arg1, arg3, arg3, arg4
Run Code Online (Sandbox Code Playgroud)

  • 虽然Ruby支持不在方法调用上使用括号,但是我们很多脾气暴躁的老开发人员几乎总是使用它们,而不是允许解释器弄错.一对包裹括号不会增加足够的视觉噪音来引起问题,但它们可以在代码可靠性方面产生很大的不同,并且易于调试和维护.你会发现很多关于SO的问题,问题的根本原因是引发问题的是缺少括号,所以尽管有噪音,也建议使用它们. (2认同)