在ruby中附加冒号和在冒号前面附加冒号有什么区别?
示例:
#In rails you often have things like this:
has_many :models, dependent: :destroy
为什么dependent:
有一个附加的冒号,而:models
和:destroy
有一个前置的冒号?有什么区别?
在ruby中附加冒号和在冒号前面附加冒号有什么区别?
示例:
#In rails you often have things like this:
has_many :models, dependent: :destroy
为什么dependent:
有一个附加的冒号,而:models
和:destroy
有一个前置的冒号?有什么区别?
4条答案
按热度按时间4xrmg8kj1#
这是Ruby 1.9中的一种新语法,用于定义散列中的键符号。
前置和附加的
:
定义了symbol
,但是后者仅在哈希初始化期间有效.您可以将symbol看作一个轻量级字符串常量。
它相当于
在1.9之前,散列是用稍微冗长且难以键入的语法定义的:
他们在1.9中简化了它:
如果你曾经在Ruby 1.9之前的版本中编写一个模块,请确保使用旧的语法。
siotufzp2#
由于Ruby允许省略括号
()
,在某些情况下省略大括号{}
,这可能不是很明显,但上面的代码实际上是这样的:has_many(:models, { dependent: :destroy } )
现在,它意味着
has_many
有两个参数,一个是符号:
,如果你愿意,它是一个不可变的字符串,还有一个散列,其中dependent
是键,destroy
是值;也可以看作X1 M7 N1 X。qojgxg4l3#
在这两种情况下,冒号都表示符号,但是当符号是散列中的键时,追加冒号是简写。
等于
unguejic4#
“附加的”冒号只是Python 1.9中显示散列的新的常用方式。
dependent: :destroy
与:dependent => :destroy
是相同的另一方面,“prepended”冒号在Ruby中表示符号数据类型。