在Ruby中,空字符串""
在条件方面是真正的。我看到很多人都在为这个事实而苦苦挣扎。 Ruby on Rails的blank?
是尝试克服这个问题。另一方面,当这种说明变得方便时,并不是立即显而易见的。是否有任何用例,这个事实变得方便,否则会出现理论上的问题?
答案 0 :(得分:9)
我想我想出了答案。可能是出于理论上的原因和效率的原因。理论上,在单个类的不同实例之间绘制一条线比在类之间绘制一条线更复杂,并且需要更多的计算。如果""
很麻烦,那么每当条件中存在字符串时,Ruby内部就必须检查字符串的长度。相反,如果真相只能由阶级来判断,那恰好就是这种情况,那么它就会更有效率。也许这也是false
和true
不归入单个类Boolean
但分别属于独立类的原因。
另一种可能性是false
和nil
只有一个实例,所以在Ruby内部处理它只需要检查指针/对象id,而字符串是可变的,并且会需要更多的复杂性来检查空虚。
答案 1 :(得分:4)
减少被视为 falsey 的事物的数量是一件好事。它简化了语言,简化了布尔规则,使它们更易于记忆和应用,从而减少了错误。
看看PHP所带来的混乱:false
,0
,0.0
,'0'
,''
,null
和{{ 1}}都是 falsey ,每天让很多人感到惊讶。
如果要测试空字符串,请测试空字符串。您应该知道您的变量是包含字符串还是布尔值,并且能够进行相应的测试。
答案 2 :(得分:2)
我认为Ruby的设计很简单,并且FEWER值为false会使程序更易于推理:“只有两个对象的布尔值为false,这些是假对象本身和nil对象。” / p>
权衡是你可能需要写.blank?
更多。另一方面,有多少个字段的最小长度为1?不多。如果你正在检查.size > 1
,那么“空字符串是真的”是没用的。
每种语言都选择它是“范式”。例如,在SQL中,布尔运算实际上有3个值(true,false,null)。在Perl和C中,0
是错误的。哎呀,在某些语言中,字符串“false”是错误的。