如果我们增加我们这里省略,如Ruby的语法允许,我们会得到这样的事情的所有符号:
protect_from_forgery({ :with => :exception })
凡{ :with => :exception }
是一个HashMap,俗称红宝石之间的“哈希” devs:一组键值对。在这里,我们有一对散列:价值:exception
的密钥:with
。
如果散列是方法调用中的最后一个参数,则不需要在{}
中包含散列。那么,现在让我们忽略大括号:
protect_from_forgery(:with => :exception)
这看起来有点丑,这么多字是刚刚的Ruby语法的一部分。但是,如果在一对值(key => value
)键是符号(:thing
),存在的Ruby一种语法用于定义一个键 - 值对:在互联网此
protect_from_forgery(with: :exception)
然而,许多代码示例中不使用替代语法。显然,赞成与旧版本的Ruby兼容(1.9之前)。今天,在大多数情况下,使用这种旧版本的Ruby是不切实际的,所以现在取决于个人的喜好。
有时我们可以省略包含参数的括号,只要这样不会使代码含糊不清或不易读。这里没有。但如果你决定自己使用它,请特别注意这个功能。
protect_from_forgery with: :exception
Ruby Style Guide建议只省略括号如果您正在使用某种形式的DSL的基于Ruby。问题是,什么是DSL,什么不是。在这里我们可以称之为“Rails控制器定义DSL”,我们通过发出DSL命令来描述一个类。可能有资格作为DSL使用。
这是'{:with =>:exception}'语法糖''。 – sawa 2014-10-08 17:04:57
句法糖意味着一件事与另一件事是一样的,但工作较少。有关语法糖的更完整解释,请参阅http://en.wikipedia.org/wiki/Syntactic_sugar。 – bigtunacan 2014-10-08 17:06:32
是不是省略了大括号较少的工作? – sawa 2014-10-08 17:07:42