在ruby中追加和添加冒号有什么区别?
示例:
#In rails you often have things like this:
has_many :models, dependent: :destroy
为什么dependent:
有一个附加冒号,但:models
和:destroy
有一个前置冒号?有什么区别?
答案 0 :(得分:10)
这是Ruby 1.9中的一种新语法,用于定义作为散列中键的符号。
前置和附加的:
都定义了symbol
,但后者仅在哈希初始化期间有效。
您可以将symbol视为轻量级字符串常量。
相当于
:dependent => :destroy
在1.9之前,使用稍微更加冗长和难以键入的语法定义哈希:
hash = {
:key => "value",
:another_key => 4
}
他们在1.9中简化了它:
hash = {
key: "value",
another_key: 4
}
如果您要编写要在1.9之前的Ruby上使用的模块,请确保使用较旧的语法。
答案 1 :(得分:5)
由于Ruby允许您省略括号()
,在某些情况下可以省略大括号{}
,因此上面的代码实际上看起来像这样:
has_many(:models, { dependent: :destroy } )
现在,这意味着has_many
接受两个参数,一个是符号:
,一个是不可变的字符串,如果你愿意,还有一个哈希,其中dependent
是键和{ {1}}是值;也可能被视为destroy
。
答案 2 :(得分:4)
在这两种情况下,冒号都表示符号,但是当符号是哈希中的键时,附加它是简写。
dependent: :destroy
与
相同:dependent => :destroy
答案 3 :(得分:2)
"追加"冒号只是在1.9中显示哈希的新常用方法。
dependent: :destroy
与:dependent => :destroy
另一方面," prepend"冒号表示Ruby中的符号数据类型。