为什么我们只在某些时候省略括号?

时间:2016-06-08 03:03:46

标签: ruby-on-rails

例如,

validates :name, presence: true 

而不是

validates(:name, presence: true)

但我们将括号保留在

@user = User.find(params[:id])

摘自哈特尔书。

3 个答案:

答案 0 :(得分:2)

validatesattr_reader,Sinatra get,RSpec' s describe和类似的函数调用可以看作是声明。在这种情况下,通常会关闭括号。 "真"为清晰起见,函数调用通常用括号写成。

在一个更受欢迎的Ruby风格指南的words中:

  
      
  • 忽略作为内部DSL(例如Rake,Rails,RSpec)一部分的方法的参数的括号,具有"关键字" Ruby中的状态(例如attr_reader,puts)和属性访问方法。在所有其他方法调用的参数周围使用括号
  •   
     

[...]

     
      
  • 省略属于内部DSL的方法的外括号和括号。
  •   

答案 1 :(得分:1)

这是一种红宝石风格的选择;你可以做任何一件事。大多数人,包括我自己,大多数时候都会省略括号。 Ruby作为一种语言非常努力地避开你的方式并给你几种方法来实现同样的事情,无论哪种情况在特定时刻都是正确的。

你可以选择使用它们来表示清晰,或者最常用的是长行代码,其中解释器可能会绊倒什么是参数而不是下一个语句等等。

你的最后一个例子没有parens就能正常工作。

答案 2 :(得分:0)

在大多数情况下,括号与无括号是一个常规问题。离开括号是完全没问题的。

通常在Ruby中使用DSL时(例如validates),您将省略括号。在调用常规实例或类方法时,我经常会看到人们包含它们。

在更复杂的示例中,为了清晰起见,您需要包括括号,并确保您可以控制它的执行方式。