冒号的prepend和append有什么区别? (:item vs item:)

7
在 Ruby 中,追加冒号和前置冒号有什么区别?
例如:
#In rails you often have things like this:
has_many :models, dependent: :destroy

为什么dependent:后面要加冒号,但是:models:destroy前面加冒号?它们之间有什么区别吗?

可能是重复的问题::key => "value"key: "value"哈希符号有什么区别吗? - mu is too short
4个回答

10

这是Ruby 1.9中用于定义哈希表键的符号的新语法。

在前面或后面添加冒号都可以定义一个符号(symbol),但后者仅在哈希表初始化期间有效。

你可以将符号视为轻量级字符串常量。

它相当于:

:dependent => :destroy

在1.9版本之前,哈希的语法定义略微冗长且输入起来比较麻烦:

hash = {
   :key => "value",
   :another_key => 4
}

他们在1.9版中进行了简化:

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

5

由于Ruby允许您省略圆括号(),在某些情况下还可以省略大括号{},因此可能不是很明显,但上面的代码实际上看起来像这样:

has_many(:models, { dependent: :destroy } )

现在,这意味着has_many接受两个参数,其中一个是符号:,它是一个不可变的字符串,也是哈希表的一部分,其中dependent是键,destroy是值;也可以写成:dependent => destroy


4
在这两种情况中,冒号表示一个符号,但是附加它是一种简写形式,用于当符号是哈希表中的一个键时。
dependent: :destroy

是相同的。
:dependent => :destroy

2
"appended"冒号只是1.9版本中显示哈希的新常见方式。 dependent: :destroy:dependent => :destroy是相同的东西。
另一方面,“prepended”冒号表示Ruby中的符号数据类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接