如果一个空字符串是真的有什么好处?

时间:2013-04-13 15:19:26

标签: ruby boolean string

在Ruby中,空字符串""在条件方面是真正的。我看到很多人都在为这个事实而苦苦挣扎。 Ruby on Rails的blank?是尝试克服这个问题。另一方面,当这种说明变得方便时,并不是立即显而易见的。是否有任何用例,这个事实变得方便,否则会出现理论上的问题?

3 个答案:

答案 0 :(得分:9)

我想我想出了答案。可能是出于理论上的原因和效率的原因。理论上,在单个类的不同实例之间绘制一条线比在类之间绘制一条线更复杂,并且需要更多的计算。如果""很麻烦,那么每当条件中存在字符串时,Ruby内部就必须检查字符串的长度。相反,如果真相只能由阶级来判断,那恰好就是这种情况,那么它就会更有效率。也许这也是falsetrue不归入单个类Boolean但分别属于独立类的原因。

另一种可能性是falsenil只有一个实例,所以在Ruby内部处理它只需要检查指针/对象id,而字符串是可变的,并且会需要更多的复杂性来检查空虚。

答案 1 :(得分:4)

减少被视为 falsey 的事物的数量是一件好事。它简化了语言,简化了布尔规则,使它们更易于记忆和应用,从而减少了错误。

看看PHP所带来的混乱:false00.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”是错误的。