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

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

内容简介:翻译自: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值?模式匹配?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

安全之美

安全之美

Andy Oram、John Viega / 徐 波、沈晓斌 / 机械工业出版社华章公司 / 2011-4-28 / 65.00元

“这本深思熟虑的论文集(《安全之美》)帮助读者摆脱安全领域闪烁着欺骗光芒的心理恐惧,转而欣赏安全的微妙美感。本书描述了安全的阴和阳,以及引人注目的破坏性和闪亮光辉的建设者之间剑拔弩张的气氛。” ——Gary McGraw,Cigital公司CTO,《Software Security》及其他9本书的作者 大多数人不会太关注安全问题,直到他们的个人或商业系统受到攻击。这种发人深省的现象证......一起来看看 《安全之美》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具