【问题标题】:Scala: Try and casing on Success and FailureScala:尝试成功和失败
【发布时间】:2013-11-24 04:05:33
【问题描述】:

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

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

我对它的工作原理有点困惑,我假设它是从 Scala 文档中的一个类似示例中复制而来的

我了解 onComplete 需要一个将 Try 作为输入的函数,并且 Success 和 Failure 是从 Try 扩展的案例类

我不明白的是,如何在不先执行某种类型的匹配的情况下处理这些问题。

这怎么可能?

【问题讨论】:

  • 在投票结束之前,请考虑 OP 是否有可能发现其他帖子被视为重复。两个答案相同的问题不一定是同一个问题。

标签: scala


【解决方案1】:

传递给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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 2012-08-04
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多