TrueClass
,FalseClass
和NilClass
有两个不同名称的实例:一个是小写,一个是大写。一个实例似乎评估另一个实例:
true # => true
TRUE # => true
true == TRUE # => true
这两个常数之间是否存在差异?若然,差异是什么?如果它们是相同的,我应该在我的代码中使用哪些常量?我应该写some_value = true
还是some_value = TRUE
?
答案 0 :(得分:10)
不同之处在于虽然true
是Ruby中的关键字,但TRUE
是常量:
true = 1
# => SyntaxError: Can't assign to true
TRUE = false
# => warning: already initialized constant TRUE
# => false
TRUE == true
# => false
答案 1 :(得分:7)
true.object_id # => 20
TRUE.object_id # => 20
true == TRUE # => true
但是使用true
作为全大写版本很少见,可能会令人困惑。
它显然是一个常数,因为它是大写的,但它是一个常量,被初始化为与true
完全相同的对象引用,所以它并不是真的不同。请记住,Ruby变量和常量只是对象引用。一切都是对象。
相同的和不同的,因为英语单词很难定义。你可以整天争论英语单词的含义。在OOP中,我们定义了身份和相等的概念。在这种情况下,true
和TRUE
都是相同且相同的。这就是为什么Ruby相等比较返回true以及为什么对象ID相等的原因。
所以我认为,鉴于在这种情况下两个实际的OOP定义都匹配,我们应该能够说相同的。但我猜你不必这么做。
答案 2 :(得分:1)
虽然没有实际差异:
true.class # => TrueClass
TRUE.class # => TrueClass
你应该使用
variable = true
大写通常用于命名常量:
NUMBER_OF_WEEKDAYS = 7
正如其他答案中所提到的,有一个我没有提到的问题:
TRUE == true # => true
TRUE = false
true == TRUE # => false