Scala:Predicate没有Exception

时间:2015-09-24 02:18:44

标签: scala for-loop

此异常在Scala中意味着什么:

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

2 个答案:

答案 0 :(得分:7)

这可能导致的一种方法是,如果你有一个将Try与谓词(if语句)结合起来的for-comprehension:

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

如果filter评估为booleanExpr,Try的false方法可以抛出java.util.NoSuchElementException以跳过循环体。

该例外的reason字段是“谓词不适用于......”

正如@Guillaume在评论中指出的那样,Try的实现通过它实现filter的方式导致了这一点 - 当你在for comprehension中使用条件(if)时编译器调用的方法{1}}:

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

答案 1 :(得分:5)

具体针对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: