Foreach / Map块中的抛出异常

尼克·艾伦

我很好奇为什么在以下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 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从并行Stream.forEach抛出异常

来自分类Dev

php foreach在foreach中在foreach中

来自分类Dev

foreach 循环抛出 ArgumentOutOfRangeException

来自分类Dev

终端操作(例如forEach)可以重新抛出检查的异常吗?

来自分类Dev

foreach条件过滤中的foreach

来自分类Dev

foreach中的产品列表与foreach

来自分类Dev

foreach中的codeigniter foreach(array)

来自分类Dev

在foreach C#中的foreach

来自分类Dev

foreach条件过滤中的foreach

来自分类Dev

使用foreach修复块中的循环错误

来自分类Dev

使用foreach修复块中的循环错误

来自分类Dev

PHP foreach表现异常

来自分类Dev

DataTable在Parallel.ForEach中引发异常

来自分类Dev

foreach循环抛出错误

来自分类Dev

“ Foreach”循环抛出错误

来自分类Dev

C#-返回后在catch块中抛出异常

来自分类Dev

Laravel 4-在foreach中的foreach

来自分类Dev

按钮操作块内的Foreach循环抛出“ Type()不符合视图”

来自分类Dev

并行Foreach引发ApartmentState异常

来自分类Dev

在forEach()中创建方法;

来自分类Dev

在PowerShell中嵌套的ForEach()

来自分类Dev

在foreach中的mysql查询

来自分类Dev

foreach中的jQuery setTimeout

来自分类Dev

foreach中的AddListener

来自分类Dev

在forEach中创建孩子

来自分类Dev

forEach中的木偶测试

来自分类Dev

javascript中的递归forEach()

来自分类Dev

在R中列出的foreach

来自分类Dev

&&在Foreach循环(PHP)中