2015-09-24 12 views
5

Was diese Ausnahme in Scala bedeutet:Scala: Prädikat nicht gilt Ausnahme

java.util.NoSuchElementException: Predicate does not hold for ... 
+1

Wird es zum Verständnis verwendet? –

+0

Tatsächlich scheint es, dass es innerhalb einer der Aussagen innerhalb des Verständnisses geschieht, niemals zum Körper. – automorphic

+2

können Sie den vollständigen Fehler und den Code einfügen? –

Antwort

4

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: 
6

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)) 
+1

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

+2

@Aivean https://github.com/scala/scala/blob/2.11.x/src/library/scala/util/Try.scala#L241 –

+0

@ 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

Verwandte Themen