“TRUE”和“true”之间有区别吗?

时间:2016-07-02 18:19:57

标签: ruby boolean

TrueClassFalseClassNilClass有两个不同名称的实例:一个是小写,一个是大写。一个实例似乎评估另一个实例:

true # => true
TRUE # => true
true == TRUE # => true

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

3 个答案:

答案 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中,我们定义了身份相等的概念。在这种情况下,trueTRUE都是相同且相同的。这就是为什么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