當我有一個字符串變量x
,由於某種原因是""
:與空字符串斯卡拉變量返回true
val x = ""
,我做的事: x.forall(_.isDigit)
返回true
我有點困惑,爲什麼它是真的,它不應該是假的? 當我的條件不起作用時,我發現了這個難題。 後來我去看了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
。我發現在執行forall
之前不應該有必要執行x.isEmpty
。
你的問題到底是什麼? – folone 2013-03-21 17:17:26