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

未来[任何]和未来[_]的区别

巩光誉
2023-03-14

好吧,我想问题已经在标题中完成了。没什么大不了的,但我只是想知道。我有一个返回正确值或错误代码枚举项的方法。例如这样的东西:

def doMyStuff(): Future[_] = {
    val result = db.queryMyData().map {
        case some(data) =>
            val modifiedData = data.doStuff()
            modifiedData
        case None =>
            Errors.THIS_IS_FALSE
    }
    result
}

其中db.queryMyData()返回一个Future,而data.doStuff()只是修改数据

现在我已经直观地编写了< code>Future[_],因为返回值是灵活的。但是在查看其他库时,我看到了< code>Future[Any]的用法。当你在函数的返回中使用匹配用例来检查它是什么数据时,这似乎也是合乎逻辑的。

例如,使用它的代码如下:

doMyStuff().map {
    case data: MyDataType => // Blah blah
    case Errors.Value => // error handling
}

所以,我的问题是:在这里使用“或”有什么区别,为什么要使用正确的一个?

共有1个答案

况胡媚
2023-03-14

这是一个语义问题:

存在类型T[_]意味着在_的位置有一个类/类型,我根本不关心它,但它必须在那里。

T[Any] 表示必须有一个子类 Any present。

当您想要序列化底层类时,差异就会发挥作用。如果您只使用_而没有任何类型边界,您将无法使用许多Scala JSON库中的一些。

 类似资料:
  • 我很好奇递归构建Akka期货链的最佳方式,它将按顺序运行,如果未来的< code>doWork调用失败,未来将重试3次,如果重试次数用完,链将失败。假设所有< code>doWork调用都通过,则返回的futChain应该只完成。 < li >如何将结果作为集合获取?即,在本例中,从< code>doWork函数返回的每个< code>String(我需要以某种方式修改< code>recurse

  • 问题内容: 信封:Akka 2.1,scala版本2.10.M6,JDK 1.7,u5 现在是我的问题:我有: 现在在第一行中,我有一个Future对象的Future,有什么方法可以在不阻塞当前线程的情况下将其转换为Future? Akka有什么方法吗?据我检查,我还没有发现…第一次发帖....不好意思的格式和组织…:〜P 问题答案: 简短答案(英语):flatMap dat sh!t 较短的答案

  • 和之间有什么区别? 它们都像未来结果的占位符,但是主要区别在哪里?

  • left join 和 inner join的区别 线程池的调用顺序 Spring循环依赖和三级缓存 AOP机制 索引 最左前缀原则的失效 ABCD 有>号 范围查询后会失效 MVCC的实现 可不可以实习

  • 问题内容: 我将我的期货从ExecutorService推送到哈希图中。以后,我可以从哈希图中调用期货取消。尽管结果是正确的,但后来我在Callable过程中命中了断点,就好像Future cancel()无效。我认为这里可能是两个不同的引用的情况(即使在断点时引用ID被列出为相同),但我想知道是否有些专家可以插手。代码如下所示: 我允许处理继续进行(这是一个在任务传入时提交任务的循环),以后我可

  • 我正在寻找一种将任意长度的期货列表转换为期货列表的方法。我使用的是Playframework,所以最终,我真正想要的是一个<code>未来〔结果〕,但为了让事情更简单,让我们说<code>将来〔List[Int]]通常的方法是使用<code>Future.sequence(…) 例如,执行以下操作不起作用: 我希望能够将1和3从那里拉出来,而不是只得到异常。我尝试将来使用<code>。折叠,但这显