在Ruby中,我们有运行方法的类。示例class.methodName
。现在,我来自PHP世界,其中method == function并且应该有括号。在,Ruby。我注意到了。工作与工作渲染相同的结果:
没有parens:
"Gaurish".reverse # => "hsiruaG"
用parens:
"Gaurish".reverse() # => "hsiruaG"
两者都是一样的。如果是,那么我们应该使用哪一个。如果没有,那有什么区别?
答案 0 :(得分:4)
简短的回答是两种表达方式几乎相同。更长的是,存在一些差异:
首先,有些方法几乎总是在没有括号的情况下调用,即使是参数,例如puts
- 它的参数很少用括号括起来。提供对实例变量的访问的方法也是如此,例如person.name
和类似的。
如果链接的方法很多,那么无参数方法通常不会有圆括号,而带参数的方法则没有。
例如。 "aaaabc".squeeze.sub(/ab/,"c").upcase
如果存在未在对象上调用的嵌套方法调用,则主题的参数应该用括号括起来以避免混淆,例如: puts rand 5
- 即使它有效,也可能很难弄清楚这里发生了什么,所以首选的样式是puts rand(5)
。
以前的规则不适用于运算符(因为它们是在对象上调用的),因此会经常看到puts "abc" * 5
之类的调用。这里没有什么奇怪的 - 运算符比常规方法调用具有更高的优先级,因此很容易弄清楚在这种情况下会发生什么(在给出的示例中,字符串将首先相乘然后传递给pust
。 / p>
当我们在方法的上下文中编写something = 5
时,如果我们调用方法(某事物=(值))或为变量赋值,则可能会产生混淆。在这种情况下使用括号会很尴尬,因此当我们希望调用方法时,通常的解决方案是在方法名称前面写self
,例如: self.something = 5
。
当我们在类方法的上下文中调用getter或没有参数的任何其他方法时会发生类似的情况,例如: name
(没有self
)。在这种情况下,有两个选项:第一个描述(self.name
),第二个我们将括号放在方法名称(name()
)之后。两者都优于裸方法名称。
最后但并非最不重要 - 没有参数的方法通常在没有括号的情况下调用,只有一个重要异常 - 当你在方法中调用super
而没有参数时接受参数,这些参数将传递给该调用。有时这是不可取的,所以在这种情况下括号是强制性的,即super()
不会传递参数。
答案 1 :(得分:3)
他们是一样的。没有空括号的方法调用在Ruby中更为标准。
答案 2 :(得分:2)
()
是可选的。无论你发现什么更具可读性。
答案 3 :(得分:2)
是的,展位是一样的。你也不需要用parens包装参数,所以:
puts "lalala"
puts("lalala")
"alla".gsub 'la', 'a'
"alla".gsub('la', 'a')
是一样的。我更喜欢没有parens的版本,但有时如果你链接方法调用则需要它们。当你想要方法的服务返回值时,也需要Parens将参数作为其他方法的参数,即:
link_to I18n.translate('some text'), root_path
答案 4 :(得分:1)
它们是相同的,但如果你的方法有参数,那么首选的是使用parentesis的语法。这是一个例子:
def foo x
...
end
foo a * 3
会发生什么?用f调用foo然后将结果重复3,反之亦然。这可能有点令人困惑。 例如,在irb中,您会收到一条警告:“Parantesize参数以供将来使用。”
对于零参数方法,两种语法都是有效的,通常不使用parathesis不会引起太多的混淆,我想。