在红宝石中附加和预先添加结肠有什么区别?
例:
#In rails you often have things like this: has_many :models, dependent: :destroy
为什么dependent:
有一个附加的结肠,但:models
和:destroy
有预谋的结肠?有什么不同?
这是Ruby 1.9中的一种新语法,用于定义作为哈希中键的符号.
前置和附加都:
定义了a symbol
,但后者仅在散列初始化期间有效.
您可以将符号视为轻量级字符串常量.
它相当于
:dependent => :destroy
在1.9之前,使用稍微更冗长和难以键入的语法定义哈希:
hash = { :key => "value", :another_key => 4 }
他们在1.9中简化了它:
hash = { key: "value", another_key: 4 }
如果您要编写要在1.9之前的Ruby上使用的模块,请确保使用较旧的语法.
由于Ruby允许你省略括号()
,在某些情况下允许花括号,{}
它可能不是很明显,但上面的代码实际上是这样的:
has_many(:models, { dependent: :destroy } )
现在,它意味着has_many
需要两个参数,一个是符号:
,一个是不可变的字符串,如果你愿意,还有一个哈希,其中dependent
键destroy
是键,是值; 也可能被视为:dependent => destroy
.