如果我們增加我們這裏省略,如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