2015-09-24 28 views

cevap

4

O 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: 
özgü olduğunda
6

bir yolu olan bir for-anlama, bir bir yüklemi deneyin birleştirir (if ifade) : Try ait

for { 
    x <- Try(expr) if booleanExpr 
} { 
    ... 
} 

filter yöntem booleanExprfalse olarak değerlendirilirse döngü gövdesini atlamak için java.util.NoSuchElementException atabilir. Bu istisna

reason alan "Yüklem için tutmaz ..."

@Guillaume açıklamalarda işaret ettiği gibi

, bunun filter uygulayan arada bu neden deneyin uygulanması olmasıdır - bir for comprehension içinde koşullu (varsa) kullandığınızda derleyici tarafından denir yöntemi:

if (p(value)) this 
else Failure(new NoSuchElementException("Predicate does not hold for " + value)) 
+1

Lütfen bu bilgilerin kaynağını belirtin. Bildiğim kadarıyla, '' '' '' '' 'ile' 'Filter' içine aktarılır. Döngü gövdesini atlamak için 'NoSuchElementException 'atma hakkında hiçbir şey duymadım. – Aivean

+2

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

+0

@ GuillaumeMassé, anladım. Brent'in cevabı, bunun “anlama” ile ilgili olduğunu, bunun “Dene” nin “filtresi” ile ilgili olduğuna dair yanlış bir izlenim yarattı. – Aivean