为什么Rubocop默认指南建议在方法定义中使用括号?

时间:2018-02-06 20:00:44

标签: ruby rubocop ruby-style-guide

为什么Rubocop / community-driven Ruby style guide在方法定义中推荐使用括号?

def my_method(param1, param2)
end
# instead of
def my_method param1, param2
end

根据具体情况,允许使用括号或不使用括号进行方法调用。但是,我的第一印象是,方法调用中缺少括号比方法定义中缺少括号更可能模糊。是否有背后的原因,例如使代码更加万无一失,或者是因为“历史原因”或“因为它是最普遍的风格”而发生的?

澄清:

我不是在询问哪种风格更容易阅读。

lint Lint/AmbiguousOperator基于do_something *some_array含糊不清且错误来源(Link)的想法。我想知道Style/MethodDefParenthesesLink)的情况是否相同。

回过头来找到那些警察的实际名字之后,我现在最好的猜测是没有“技术”原因,而是一个是正确的“lint”而另一个是“风格”问题。

1 个答案:

答案 0 :(得分:2)

initial commit中省略了该基本原理,其中该规则是其中的一部分,表明没有特定的技术原因。

相应警察放在const gm = require('gm').subClass({imageMagick: true})部门而不是Style这一事实进一步证明了这只是风格的问题。

方法定义的语法非常简单。 Lint关键字(可选)后跟参数,后跟必须跟一个终结符(换行符或def)。

可能的变化是:

  • 单行方法定义,
  • 内联修饰符,例如;
  • 默认和关键字参数,
  • splat-和block arguments。

所有这些都可以在有括号和无括号的情况下正常工作。此外,使用private标志运行带有未加括号的方法定义的文件不会引发警告。

这些因素共同排除了建议使用括号以避免歧义的可能性。