""
在条件语句中被视为真值。我看到很多人对此感到困惑。Ruby on Rails的blank?
是一种解决这个问题的尝试。然而,并不容易明确何时使用此规范会更方便。是否存在任何使用此规则的情况,或者如果规则不同会有理论上的问题?
我认为我找到了答案。可能是出于理论上的原因和效率考虑。在单个类的不同实例之间绘制线条在理论上比在类之间绘制线条更加复杂,并且需要更多计算。如果“”
是假值,那么Ruby内部每次在条件中出现字符串时都必须检查字符串的长度。相反,如果可以仅通过类来判断真假性,这恰好是情况,那么它将更加高效。也许这也是为什么false
和true
没有被归为单个类Boolean
而分别属于独立的类的原因。
另一个可能性是只有一个false
和nil
实例,因此在Ruby内部处理这一点只需要检查指针/对象ID,而字符串是可变的,并且需要更复杂的空值检查。
false
,0
,0.0
,'0'
,''
,null
和array()
都是"falsey",这让很多人每天都感到惊讶。
如果要测试空字符串,请测试空字符串。您应该知道您的变量包含的是字符串还是布尔值,并能够相应地进行测试。
'0'
,它非常引起争议。它不是一个空字符串,但被认为是false
。这似乎相当武断。那么为什么不是字符串'false'
(即字符串"false")呢?因为它是一个非空字符串。因此,规则是非空字符串除了字符串'0'
外都为false。对于新手来说,这比false
和nil
等于false
更难解释和理解。在PHP中,您必须真正地考虑像此函数可能会返回一个空数组,我真的希望它意味着false
吗?或者此处输入可能是“0”,应该是false
吗? - decezefalse
值的最小可能集合划分得非常接近。它只是尽可能地遵循“少即是多”的哲学。 ""
没有被包括在内。问Matz原因,其他人都无法告诉你。 - deceze
""
视为假值会变得方便?我认为这更加令人惊讶。 - user229044blank?
的任何地方都是使用情况,这种情况有很多。 - sawanil
。字符串就是字符串,长度为零并不改变它的本质。 - user229044x = my_function; puts x if x
其中 my_function 返回字符串或 false。搞定了。 - user229044