gpt4 book ai didi

scala - Foreach/Map block 中的抛出异常

转载 作者:行者123 更新时间:2023-12-04 04:10:44 25 4
gpt4 key购买 nike

我很好奇为什么在下面的foreach块中引发了异常。我希望没有值能够通过过滤器,因此永远不会到达foreach块。 map也会发生相同的行为。

scala> (1 to 10) filter { _ > 12 } foreach { throw new Exception }
java.lang.Exception
... 33 elided

我希望不会抛出异常,并且其行为类似于以下从未执行 println的行为。
scala> (1 to 10) filter { _ > 12 } foreach { println _ }

也许这与异常的处理方式有关?为什么是这样?

最佳答案

{ throw new Exception }

只是一个引发异常的块-结果,它的类型为 Nothing。由于 Nothing是所有类型的子类型,因此它与 Function[Int, T]兼容,后者是 foreach块的自变量。

如果事先创建函数,则可以更清楚地看到以下内容:
//throws exception
val f: Function[Int, Unit] = { throw new Exception }

如果要创建 Function[Int, Nothing],则需要将参数添加到块中:
(1 to 10) filter { _ > 12 } foreach { _ => throw new Exception }

关于scala - Foreach/Map block 中的抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com