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。