ruby-on-rails 冒号的prepend和append之间的差异(:item vs item:)

zlwx9yxi  于 2023-01-22  发布在  Ruby
关注(0)|答案(4)|浏览(151)

在ruby中附加冒号和在冒号前面附加冒号有什么区别?
示例:

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

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

4xrmg8kj

4xrmg8kj1#

这是Ruby 1.9中的一种新语法,用于定义散列中的键符号。
前置和附加的:定义了symbol,但是后者仅在哈希初始化期间有效.
您可以将symbol看作一个轻量级字符串常量。
它相当于

:dependent => :destroy

在1.9之前,散列是用稍微冗长且难以键入的语法定义的:

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

他们在1.9中简化了它:

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

如果你曾经在Ruby 1.9之前的版本中编写一个模块,请确保使用旧的语法。

siotufzp

siotufzp2#

由于Ruby允许省略括号(),在某些情况下省略大括号{},这可能不是很明显,但上面的代码实际上是这样的:
has_many(:models, { dependent: :destroy } )
现在,它意味着has_many有两个参数,一个是符号:,如果你愿意,它是一个不可变的字符串,还有一个散列,其中dependent是键,destroy是值;也可以看作X1 M7 N1 X。

qojgxg4l

qojgxg4l3#

在这两种情况下,冒号都表示符号,但是当符号是散列中的键时,追加冒号是简写。

dependent: :destroy

等于

:dependent => :destroy
unguejic

unguejic4#

“附加的”冒号只是Python 1.9中显示散列的新的常用方式。
dependent: :destroy:dependent => :destroy是相同的
另一方面,“prepended”冒号在Ruby中表示符号数据类型。

相关问题