当我有一个字符串变量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
Run Code Online (Sandbox Code Playgroud)
因此很明显,它的持"空洞的真理"的原则,因为计数器变量i返回为0我的字符串的长度也是0,它最终被0==0因此true.我发现x.isEmpty在做之前没必要做一个forall.
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |