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

Why does the Rubocop default guidelines recommend parentheses in method definitions?

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

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

方法调用可以带括号也可以不带括号,视情况而定。但是,我的第一印象是,在方法调用中缺少括号比在方法定义中缺少括号更可能 模棱两可。背后是否有原因,例如使代码更简单,还是因为 "historical reasons" 或 "because it was the most widespread style"?

澄清:

我不是征求关于哪种风格更容易阅读的意见。

lint Lint/AmbiguousOperator 基于这样的想法,即 do_something *some_array 是模棱两可的,并且是错误的来源 (Link). I wondered if this is the same case for Style/MethodDefParentheses (Link)。

回去查了那些警察的真实姓名后,我现在最好的猜测是没有 "technical" 原因,而是一个是正确的 "lint",另一个是 "style"事.

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

事实上,相应的警察被安置在 Style 部门,而不是 Lint,进一步证明这只是风格问题。

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

可能的变化是:

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

无论有没有括号,所有这些都可以正常工作。此外,运行 具有使用 -w 标志的未加括号的方法定义的文件不会引发警告。

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