scala.util.Try:如何获得Throwable值?模式匹配?

栏目: Scala · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/25588387/scala-util-try-how-to-get-throwable-value-pattern-matching

以下REPL片段假定:

import scala.util.{Try, Success, Failure}

为什么这两个语句不能通过编译?我得到“构造函数无法实例化为期望的类型”:

Failure(new Exception("a")) match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

Success(123) match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

我可以通过Try with get或toOption获得成功价值.是否有相应的方法来获取失败的Throwable值或Option [Throwable]?

编辑:从失败/成功投射尝试工作

Failure(new Exception("a")).asInstanceOf[Try[Int]] match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

Success(123).asInstanceOf[Try[Int]] match {
  case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

第一个代码段无法编译,因为Success不是Failure的子类型.编译器认为你很傻,因为Success(i)情况永远不会匹配.

举一个更简单的例子,这也不能编译.

Failure(new Exception()) match { case Success(_) => }

出于同样的原因,这也不是这样.

42 match { case Success(_) => }

你所编写的内容几乎可以正常工作,但你匹配的值必须有一个更通用的Try [_]类型(无论如何,如果模式匹配实际上是在一些有用的上下文中使用的话).

(Failure(new Exception("a")): Try[_]) match {
    case Success(i) => "a"; case Failure(e) => "b"; case _ => "c"; }

翻译自:https://stackoverflow.com/questions/25588387/scala-util-try-how-to-get-throwable-value-pattern-matching


以上所述就是小编给大家介绍的《scala.util.Try:如何获得Throwable值?模式匹配?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Speed Up Your Site

Speed Up Your Site

Andrew B. King / New Riders Press / 2003-01-14 / USD 39.99

There's a time bomb on the web: user patience. It starts ticking each time someone opens one of your pages. You only have a few seconds to get compelling content onto the screen. Fail, and you can kis......一起来看看 《Speed Up Your Site》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具