冒号的前置和追加之间的区别(:项目与项目:)

时间:2013-08-13 18:59:56

标签: ruby-on-rails ruby colon

在ruby中追加和添加冒号有什么区别?

示例:

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

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

4 个答案:

答案 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中的符号数据类型。