此异常在Scala中意味着什么:
java.util.NoSuchElementException: Predicate does not hold for ...
答案 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: