"TRUE"和"true"之间有区别吗?

Aar*_*sen 6 ruby boolean

有两个实例TrueClass,FalseClassNilClass用不同的名字:一个是小写字母,一个大写字母.一个实例似乎评估另一个实例:

true # => true
TRUE # => true
true == TRUE # => true
Run Code Online (Sandbox Code Playgroud)

这两个常量之间是否存在差异?如果存在差异,有什么区别?如果它们是相同的,我应该在我的代码中使用哪些常量?我应该写some_value = true还是some_value = TRUE

Sil*_*nix 10

区别在于虽然true是Ruby中的关键字,但它TRUE是一个常量:

true = 1
# => SyntaxError: Can't assign to true

TRUE = false
# => warning: already initialized constant TRUE
# => false

TRUE == true
# => false
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 7

没有.

true.object_id # => 20
TRUE.object_id # => 20
true == TRUE   # => true
Run Code Online (Sandbox Code Playgroud)

但是true作为全大写版本使用很少见,可能会令人困惑.

它显然是一个常量,因为它是大写的,但它是一个常量,它被初始化为完全相同的对象引用,true因此它并没有真正不同.请记住,Ruby变量常量只是对象引用.一切都是对象.

相同不同的英语单词很难定义.你可以整天争论英语单词的含义.在OOP中,我们定义了身份平等的概念.在这种情况下,true并且TRUE都是相同和相等的.这就是Ruby相等比较返回true以及对象ID相等的原因.

所以我认为,鉴于在这种情况下两个实际的OOP定义都匹配,我们也应该能够说同样的话.但我猜你不必这么做.