Scala:尝试和成功和失败

时间:2013-11-24 04:05:33

标签: scala

我已经实现了以下代码来处理我未来的完成,它编译得很好

resultFuture.onComplete({
      case Success => // success logic
      case Failure => // failure logic
    })

我对它是如何工作有点困惑,我假设它是从我从Scala文档中的类似示例中复制它

我理解onComplete需要一个以Try作为输入的函数,而Success和Failure是从Try

扩展的案例类

我不明白的是,如果不首先执行某种类型的匹配,你可以如何处理这些问题。

这怎么可能?

1 个答案:

答案 0 :(得分:2)

传递给onComplete的参数是partial function。以下是在REPL中定义部分函数的方法:

val f: PartialFunction[Int, String] = {
  case 3 => "three"
  case 4 => "four"
}

请注意,此处未显示match关键字。

PartialFunction[Int, String](Int => String)的子类,如果您尝试在未定义的值上调用它,则会引发MatchError异常。

每当编译器期望类型为Int=>String的参数时,就可以传递PartialFunction[Int, String](因为它是子类)。这是一个有点人为的例子:

def twice(func: Int => String) = func(3) + func(3)

twice({
  case 3 => "three"
  case 4 => "four"
})

res4: java.lang.String = threethree

twice({ case 2 => "two" })

scala.MatchError: 3 (of class java.lang.Integer)