当前位置: 首页 > 知识库问答 >
问题:

Scala:尝试和总结成功和失败

丌官开宇
2023-03-14

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

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

我对它的工作原理有点困惑,我假设它确实如此,因为我从Scala文档中的类似示例中复制了它

我知道onComplete需要一个函数,该函数将尝试作为输入,成功和失败都是从尝试扩展而来的case类

我不明白的是,如果不首先进行某种类型的匹配,你怎么能在这些情况下进行。

这怎么可能在这里?

共有1个答案

游皓
2023-03-14

传递给<code>onComplete</code>的参数是一个分部函数。以下是如何在REPL中定义分部函数:

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

请注意,匹配关键字没有出现在这里。

< code>PartialFunction[Int,String]是< code>(Int =)的子类

每当编译器需要 Int= 类型的参数时

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)

 类似资料:
  • 本文向大家介绍Scala尝试,包括了Scala尝试的使用技巧和注意事项,需要的朋友参考一下 示例 使用尝试map,getOrElse并且flatMap: Try与模式匹配一起使用:            

  • 我最近和我的教授讨论了如何处理基本的jdbc连接方案。假设我们要执行两个查询,这是他提出的 我不喜欢这种方法,对此我有两个问题: 1.A)我认为,如果在我们做“其他事情”的地方,或在或那么当方法结束时,s1就不会被关闭。我说得对吗? 1.B)教授一直要求我明确关闭结果集(即使声明文档明确表明它将关闭结果集),她说孙建议这样做。有什么理由这样做吗? 现在,我认为这是同样事情的正确代码: 2. A)此

  • 我有一个未来[T],我想在成功和失败上映射结果。 比如说 如果我使用< code>map或< code>flatmap,它将只映射成功的未来。如果我使用< code>recover,它将只映射失败的期货。< code>onComplete执行回调,但不返回修改后的未来值。< code>Transform可以工作,但是需要两个函数而不是一个部分函数,所以有点难看。 我知道我可以做出一个新的,并用或/

  • 问题内容: 如果我有一个如下所示的SQL表,该如何计算当前的赢或输连胜(以及按季节对赢/输连胜进行分组/重置)。我想更新表并为每条记录填写条纹。 因此,对于#1,条纹将为“ -1”,#2将为“ 1”,#3将为“ 2”,但是一旦我们降至#7,它将再次重置为“ 1”。(+1表示“赢得1场比赛”,-1表示“失去1场比赛”,依此类推。) 问题答案: 对于每个游戏,计算与之前结果相同的游戏,这样就不会有中间

  • 我的问题是:我是否应该修复我的单元测试,因为他们没有找到错误?单元测试不应该考虑其他类吗?我只是修改了我的生产性代码,因为集成测试覆盖这些内容就足够了。 编辑: 由于这些答复,似乎有必要进一步说明我的问题。我仍然不确定哪个测试负责什么。 好吧,我的测试有100%的代码复盖率,我创造的突变体被我的测试检测到,所以一切看起来都很好。 我的第二个类是一个处理程序,它负责在每次调用handler.next

  • 我有一个使用Scala2.10.4和Gradle1.6项目。我刚从Intellij12.1.15升级到Intellij14.0.1,现在我无法通过IDE运行Scala代码。我试图用一个Scala对象创建一个简单的新项目,该对象扩展了应用程序并打印了“Hello World”。我可以通过IntelliJ运行它。但是,一旦我添加了一个简单的build.gradle文件,我就不能再运行Scala了。它一