Was diese Ausnahme in Scala bedeutet:Scala: Prädikat nicht gilt Ausnahme
java.util.NoSuchElementException: Predicate does not hold for ...
Was diese Ausnahme in Scala bedeutet:Scala: Prädikat nicht gilt Ausnahme
java.util.NoSuchElementException: Predicate does not hold for ...
Es ist spezifisch für scala.util.Try
scala.util.Try(2).filter(_ < 0) // Failure(java.util.NoSuchElementException: Predicate does not hold for 2)
for {
v <- scala.util.Try(2)
if v < 0
} yield v // Failure(java.util.NoSuchElementException:
Eine Möglichkeit, dies ist verursacht werden kann, wenn Sie eine für Verständnis haben, dass ein Versuch mit einem Prädikat kombiniert (if
-Anweisung) :
for {
x <- Try(expr) if booleanExpr
} {
...
}
die filter
Methode von Versuch kann eine java.util.NoSuchElementException wirft die Schleife zu überspringen, wenn booleanExpr
-false
auswertet.
Das reason
Feld dieser Ausnahme ist „Prädikat für nicht halten ...“
Wie @Guillaume in den Kommentaren weist darauf hin, es ist die Implementierung von Versuchen, die diese es filter
durch die Art und Weise verursacht implementiert - die Methode, die vom Compiler aufgerufen wird, wenn Sie ein bedingtes (wenn) innerhalb eines for comprehension
verwenden:
if (p(value)) this
else Failure(new NoSuchElementException("Predicate does not hold for " + value))
Bitte geben Sie die Quelle dieser Information an. So weit ich weiß, wird 'if' in' for' in 'withFilter' transpiliert. Ich habe noch nie gehört, dass ich 'NoSuchElementException' geworfen habe, um den Schleifenkörper zu überspringen. – Aivean
@Aivean https://github.com/scala/scala/blob/2.11.x/src/library/scala/util/Try.scala#L241 –
@ GuillaumeMassé, ich sehe. Brents Antwort machte einen falschen Eindruck, dass dies mit 'für' Verständnis zusammenhängt, während es sich um' Filter' von 'Versuchen' handelt. – Aivean
Wird es zum Verständnis verwendet? –
Tatsächlich scheint es, dass es innerhalb einer der Aussagen innerhalb des Verständnisses geschieht, niemals zum Körper. – automorphic
können Sie den vollständigen Fehler und den Code einfügen? –