Ruby-调用函数/方法时是否应该使用括号

问题描述 投票:0回答:4

在调用函数/方法时是否有明确的标准或指南来使用或不使用括号?

例如,以下代码:

class List < Jets::Stack
  sqs_queue(:dead_letter)
end

我应该还是不应该使用括号?其他示例:

class ExampleJob < ApplicationJob
  def sqs_event ref(:dead_letter)
  end
end

vs。

class ExampleJob < ApplicationJob
  def sqs_event ref :dead_letter
  end
end

我可以遵循官方指南吗?

ruby standards conventions
4个回答
1
投票

[没有关于Ruby代码最佳做法的官方标准。但是,Ruby社区已经开发了一组首选样式。遵循这些首选样式是一个好主意,因为这会使您的代码更易于其他Ruby程序员阅读。

Nick Roz已为您提供了指向样式指南的链接。我也建议您考虑安装和使用rubocop。它将为您提供有关何时以及何时不带括号的参数,许多其他格式问题(例如适当的缩进)以及在特定情况下通常选择几种不同语法选项中的哪一种的反馈。

通常要回答关于是否对方法参数使用括号的特定问题,答案是肯定的。正如指南所说,异常是“在Ruby中具有'关键字'状态的方法。”一个示例是puts(实际上是Kernel.puts方法)。大多数人在这里不使用括号,但是指南指出它们是可选的。

[正如尼克所说的另一个例子(尽管“带有关键字参数的方法”并不完全正确;在这种情况下,参数是代表方法而不是关键字的符号)是attr_accessor,实际上是Module.attr_accessor

因此,作为一般规则,如果它看起来像“命令”(如果可以的话,则为“关键字”),但实际上是一种方法,请省略括号。否则,请使用它们。而且,如果您不确定差异,请养成使用rubocop的习惯。


1
投票

Yes there is

我想您正在寻找社区指南,因为没有Ruby核心团队提供的样式指南。

嗯,每当调用一个方法时,都应使用括号,否则将变得不清楚

# bad
x = Math.sin y
# good
x = Math.sin(y)

# bad
array.delete e
# good
array.delete(e)

# bad
temperance = Person.new 'Temperance', 30
# good
temperance = Person.new('Temperance', 30)

但是建议在没有参数的情况下跳过它们。

请注意supersuper()它们是不同的!

我唯一的例外是某种定制的DSL,例如对于DSL本身必须有一些规则或偏好。

validates :name, presence: true

对于带有关键字参数的方法也是如此:

attr_reader :name, :age

1
投票

在Ruby中通常是可选的。

Ruby趋向于简约,因此通常避免使用它们。

有时它们是必需的,例如在rspec中,期望在哪里

expect a.to be true

必须是

expect(a).to be true

除非调用参数的默认值,即调用具有参数的方法时,不使用任何括号或为空的括号都会导致ArgumentError。>

def a(x=1)

另一个考虑因素是,当您想对某结果的结果调用方法时,当您需要使该方法明确地位于最终结果上时,即

"br" + "own".upcase 

brOWN

但是

("br" + "own").upcase

BROWN

最后,当我谈论清晰度时,有时即使没有严格的要求,也最好设置它们。通常,这是在复合表达式中,而不是依赖于运算符的优先级等。或者,如果您想要一个特定的表达式不能由标准运算符的优先级执行,并且想要自己的分组和运算顺序,例如:

irb(main):007:0> 5 + 6 * 2
=> 17
irb(main):008:0> (5 + 6) * 2
=> 22

正如尼克所指出的,一个复杂度是super,其中supersuper()传递了参数,但是super(a,b)调用了super并使用... ab作为参数


0
投票

根据Matz

© www.soinside.com 2019 - 2024. All rights reserved.