Ruby on rails 冒号的前置和追加之间的差异(:项与项:)

Ruby on rails 冒号的前置和追加之间的差异(:项与项:),ruby-on-rails,ruby,colon,Ruby On Rails,Ruby,Colon,在ruby中添加冒号和在冒号前面添加冒号有什么区别 例如: #In rails you often have things like this: has_many :models, dependent: :destroy 为什么dependent:有一个附加冒号,而:models和:destroy有一个前置冒号?区别是什么?在这两种情况下,冒号都表示符号,但添加冒号是表示符号是散列中的键的缩写 dependent: :destroy 与 :dependent => :destroy

在ruby中添加冒号和在冒号前面添加冒号有什么区别

例如:

#In rails you often have things like this:
has_many :models, dependent: :destroy

为什么
dependent:
有一个附加冒号,而
:models
:destroy
有一个前置冒号?区别是什么?

在这两种情况下,冒号都表示符号,但添加冒号是表示符号是散列中的键的缩写

dependent: :destroy

:dependent => :destroy

这是Ruby 1.9中的一种新语法,用于定义散列中的键符号

dependent: :destroy
前缀和附加的
都定义了
符号
,但后者仅在哈希初始化期间有效

可以将a视为一个轻量级字符串常量

相当于

:dependent => :destroy
在1.9之前,散列的定义语法略为冗长且难以键入:

hash = {
   :key => "value",
   :another_key => 4
}
他们将其简化为1.9:

hash = {
   key: "value",
   another_key: 4
}
如果您要在Ruby 1.9之前的版本中编写一个模块,请确保使用较旧的语法。

在1.9中,“附加”冒号只是显示哈希值的新常用方式

dependent::destroy
:dependent=>:destroy


另一方面,“带前缀的”冒号表示Ruby中的符号数据类型。

因为Ruby允许省略括号
()
,在某些情况下,大括号
{}
可能不太明显,但上面的代码实际上是这样的:

有很多(:模型,{dependent::destroy})

现在,这意味着
有许多
接受两个参数,一个是符号
,如果愿意,是一个不可变的字符串,还有一个散列,其中
依赖的
是键,
销毁的
是值;也可能被视为
:dependent=>destroy

可能重复的