Did you know that you can navigate the posts by swiping left and right?
在其他语言中,0一般表示false;在Ruby中,0表示的是True。
对于Ruby语言的布尔值,其实非常简单:
除了false和nil,其他值都是真值。
任何对象非false,非nil,该对象一定是真值。
再记录点其他内容:
nil.nil? #=> true
nil.empty? #=> true
[].empty? #=> true
{}.empty? #=> true
"".empty? #=> true
nil.blank? #=> true
[].blank? #=> true
{}.blank? #=> true
"".blank? #=> true
" ".blank? #=> true
nil.present? #=> false
[].present? #=> false
{}.present? #=> false
"".present? #=> false
" ".present? #=> false
在其他语言中,true和false作为关键字存在;在Ruby中,true和false是全局变量,引用书中的一句话:
true和false被描述为不遵循命名和赋值规范的全局变量。
这句话可以分为两点理解:
true和false表示的全局变量,并没有以$符号开头。
true和false表示的全局变量,不能被赋值。
可以通过以下语句验证:
true.class # => TrueClass
false.class # => FalseClass
将false作为 “==” 的左操作符
因为false放在左边时,其实执行的是 FalseClass#==
而放在右边的时候,如果左边是一个Object,那么实际上执行的是 Object#==
这样看起来,感觉不到两者的区别所在
书上举了这样的一个例子,很好地说明了两者的区别
class Bad
def == other
true
end
end
false == Bad.new
#=> false
Bad.new == false
#=> true
很容易理解,对于Bad类来说 == 方法,被重写了,任何情况都返回 true。
所以为了得到正确的结果,建议将false写在 == 符号的左边。