Ruby中常量前的冒号是啥意思? [复制]

Posted

技术标签:

【中文标题】Ruby中常量前的冒号是啥意思? [复制]【英文标题】:What does colon before a constant in Ruby mean? [duplicate]Ruby中常量前的冒号是什么意思? [复制] 【发布时间】:2017-03-25 12:53:42 【问题描述】:

示例如下:

def container(number=:FIXME)  
  "bottles"
end

摘自:Sandi Metz,Katrina Owen。 “99 瓶 OOP。”电子书。

【问题讨论】:

书中该代码块下面的句子说:“上面的代码接受一个名为number的参数,默认为符号:FIXME。然后解释为什么使用符号作为默认值。 我认为that 的问题有所不同,因为不是在谈论 ruby​​ 中的常量和符号。 【参考方案1】:

它不是一个常量,它是一个Symbol 对象。

FIXME = 1
FIXME.class
#=> Fixnum
Object.const_defined?('FIXME')
#=> true
:FIXME.class
#=> Symbol

【讨论】:

为什么要使用大写我认为Ruby中的约定是如果变量有大写是一个常量。这让我很困惑,因为我从未见过大写的符号。 @EkaitzHernandezTroyas 我想你会发现进一步阅读的答案 - Sandi Matz 是最伟大的 Ruby 头脑之一,相信我,如果她用大写字母创建符号,她有充分的理由这样做;) 是的,这就是我阅读这本书的原因,但我认为她没有解释为什么使用大写字母,而且我完全无知,我认为这是一种不好的做法。 @EkaitzHernandezTroyas 正如 Stefan 在你的问题下评论的那样,很可能你还没有到她解释它的那一刻。我还没读过这本书,所以不知道她为什么这样做 @EkaitzHernandezTroya 使用大写符号是因为它突出。它意味着稍后将被替换。再次引用代码块后面的段落:“此默认值是一个临时 shim,其目的是启用逐步重构。重构完成后,应删除默认值。将其设置为一个值比如 :FIXME 会帮助你记住做这个清理。”

以上是关于Ruby中常量前的冒号是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C++,构造函数后的冒号是啥意思? [复制]

函数签名中变量名前的 * 和 ** 是啥意思? [复制]

字符串前的“@”是啥意思? [复制]

python中字符串前的'u'是啥意思? [复制]

C#中变量名前的@符号是啥意思? [复制]

||= 在 Ruby 语言中是啥意思? [复制]