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



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

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()返回一个未来,data.doStuff()只是修改数据。

现在我直观地写Future[_],因为返回值是灵活的。但是在查看其他库时,我看到Future[Any]使用过。这似乎也是逻辑,当您在函数返回时使用匹配大小写来检查它是哪些数据时。

例如,使用它的代码是这样的:

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

所以,我的问题是:在这里使用 Any_ 有什么区别,为什么我应该使用正确的

这是一个语义问题:

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

T[Any]意味着必须存在一个子类Any

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

最新更新