当我有一个字符串变量x
时,由于某种原因是""
:
val x = ""
我做到了:
x.forall(_.isDigit)
它返回true
我有点纳闷,为什么是真的,不应该是假的吗?当我的 if 条件不起作用时,我很难发现这一点。然后我去看了Scala源码:
private def prefixLengthImpl(p: A => Boolean, expectTrue: Boolean): Int = {
var i = 0
while (i < length && p(apply(i)) == expectTrue) i += 1
i
}
override /*IterableLike*/
def forall(p: A => Boolean): Boolean = prefixLengthImpl(p, expectTrue = true) == length
所以显然它持有“虚无真相”原则,并且由于计数器变量i
返回为0
并且我的字符串的长度也是0
,它最终是0==0
因此true
。我发现x.isEmpty
在做forall
.