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
。