在Ruby中评估为false的是什么?

时间:2014-04-14 19:40:41

标签: ruby

falsenil评估为Ruby中的 false 。还要别的吗?请提供官方/权威参考文献的链接。

2.0.0p247 :001 > if true ; puts 'TRUE' ; else puts 'FALSE' ; end
TRUE

2.0.0p247 :002 > if false ; puts 'TRUE' ; else puts 'FALSE' ; end
FALSE

2.0.0p247 :003 > if nil ; puts 'TRUE' ; else puts 'FALSE' ; end
FALSE

2.0.0p247 :004 > if 0 ; puts 'TRUE' ; else puts 'FALSE' ; end
TRUE

2.0.0p247 :005 > if [] ; puts 'TRUE' ; else puts 'FALSE' ; end
TRUE

2.0.0p247 :006 > if {} ; puts 'TRUE' ; else puts 'FALSE' ; end
TRUE

2.0.0p247 :007 > if '' ; puts 'TRUE' ; else puts 'FALSE' ; end
(irb):616: warning: string literal in condition
TRUE

4 个答案:

答案 0 :(得分:22)

falsenil是唯一的:

http://www.ruby-doc.org/core-2.1.1/FalseClass.html

Rails提供present?,其中还包括空字符串和空数组:http://api.rubyonrails.org/classes/Object.html#method-i-present-3F

答案 1 :(得分:7)

你刚刚发现了所有

  

在Ruby中,false和nil是“falsy”,而所有其他值都是“truthy”

正如耶胡达卡茨在blog post in 2009

中提到的那样

答案 2 :(得分:2)

Ruby中唯一的false - y值是falsenil,正如David Flanagan和Yukihiro Matsumoto所着的“Ruby编程语言”一书所证实的那样。 > Matz):

  

谓词通常返回布尔值truefalse中的一个,但这不是必需的,因为 falsenil以外的任何值都可以需要布尔值时true 。 (例如,Numeric方法nonzero?如果调用的数字为零则返回nil,否则返回该数字。)

(强调我的)

这句话可以在本书的page 180找到。

答案 3 :(得分:1)

我只能同意,nilfalse确实是唯一两个在Ruby中评估为 false 的值。我只是想指出另一个有用的资源:

True and False vs. "Truthy" and "Falsey" (or "Falsy") in Ruby, Python, and JavaScript