Man*_*idt 11 functional-programming scala
从Scala开始,阅读Either
我自然地将新概念与我所知道的事物进行比较(在本例中来自Java).与检查异常的概念有什么不同Either
吗?
在这两种情况下
throws
或返回Either
)Either
)我想在Either
编写代码时会使用for-comprehensions,因为没有类似于checked异常的错误.
我想知道我是否是唯一一个遇到问题的初学者.
谢谢
Rex*_*err 12
Either
可以用于不仅仅是异常.例如,如果您要让用户为您输入输入或指定包含该输入的文件,则可以将其表示为Either[String, File]
.
Either
经常用于异常处理.Either
和检查异常之间的主要区别在于控制流Either
始终是显式的.编译器真的不会让你忘记你正在处理一个Either
; 它不会Either
在没有你知道的情况下从多个地方收集s,返回的所有东西都必须是Either
等等.因此,你Either
可能不会使用非常特殊的东西会出错,而是作为控制程序的正常部分执行.此外,Either
不捕获堆栈跟踪,使其比典型异常更有效.
另一个区别是异常可用于控制流程.需要跳出三个嵌套循环?没问题 - 抛出一个异常(没有堆栈跟踪)并在外面捕获它.需要跳出五个嵌套方法调用吗?没问题!要么不提供这样的东西.
也就是说,正如你所指出的,有许多相似之处.您可以传回信息(虽然这样Either
做很简单,但经过检查的异常会让您编写自己的类来存储您想要的任何额外信息); 你可以传递Either
,或者你可以折叠成其他东西等.
总而言之:尽管您可以Either
使用明确的错误处理来完成相同的事情并检查异常,但它们在实践中却相对不同.特别是,Either
创建和传回不同的状态非常容易,而经过检查的异常很好地绕过所有正常的控制流程,希望能够回到可以合理处理特殊情况的某个地方.
归档时间: |
|
查看次数: |
1631 次 |
最近记录: |