:あなたが持っている場合、これが発生する可能性がスカラ:述語が例外保持していないこの例外はScalaでどういう意味
java.util.NoSuchElementException: Predicate does not hold for ...
:あなたが持っている場合、これが発生する可能性がスカラ:述語が例外保持していないこの例外はScalaでどういう意味
java.util.NoSuchElementException: Predicate does not hold for ...
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:
に固有の
一つの方法があるため、理解述語で試し組み合わせ(if
声明) :トライの
for {
x <- Try(expr) if booleanExpr
} {
...
}
filter
方法はbooleanExpr
がfalse
と評価された場合、ループ本体をスキップするjava.util.NoSuchElementExceptionを投げることができます。 @Guillaumeはコメントで指摘するように、その例外の
reason
フィールドが「述語がために保持していない...」され
を、それがfilter
を実装方法により、これを原因としてみの実装です - あなたはfor comprehension
内(IF)条件を使用する場合、コンパイラによって呼ばれています方法:
if (p(value)) this
else Failure(new NoSuchElementException("Predicate does not hold for " + value))
その情報源を指定してください。私の知る限りでは、 'のために' 'が' withFilter'に移植されています。ループ本体をスキップするために 'NoSuchElementException'を投げたことについて聞いたことはありません。 – Aivean
@Aivean https://github.com/scala/scala/blob/2.11.x/src/library/scala/util/Try.scala#L241 –
@GuillaumeMassé、わかりました。ブレント氏の答えは、これが「理解」と関連しているという誤った印象を与えたが、それはすべて「試みる」の「フィルター」に関するものだ。 – Aivean
それは理解のために使われていますか? –
実際、そうです、理解の内部のステートメントの1つの中で起こるように見えます。 – automorphic
完全なエラーとコードを貼り付けることはできますか? –