Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 未来[任何]与未来[的]之间的差异_Scala_Future - Fatal编程技术网

Scala 未来[任何]与未来[的]之间的差异

Scala 未来[任何]与未来[的]之间的差异,scala,future,Scala,Future,好的,我想题目中的问题已经完成了。 没什么大不了的,但我只是想知道。我有一个返回正确值或错误代码枚举项的方法。例如,类似这样的事情: def doMyStuff(): Future[_] = { val result = db.queryMyData().map { case some(data) => val modifiedData = data.doStuff() modifiedData cas

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

def doMyStuff(): Future[_] = {
    val result = db.queryMyData().map {
        case some(data) =>
            val modifiedData = data.doStuff()
            modifiedData
        case None =>
            Errors.THIS_IS_FALSE
    }
    result
}
doMyStuff().map {
    case data: MyDataType => // Blah blah
    case Errors.Value => // error handling
}
其中
db.queryMyData()
返回未来,而
data.doStuff()
只是修改数据

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

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

def doMyStuff(): Future[_] = {
    val result = db.queryMyData().map {
        case some(data) =>
            val modifiedData = data.doStuff()
            modifiedData
        case None =>
            Errors.THIS_IS_FALSE
    }
    result
}
doMyStuff().map {
    case data: MyDataType => // Blah blah
    case Errors.Value => // error handling
}

因此,我的问题是:在这里使用Any有什么区别,为什么我应该使用正确的方法?

这是一个语义问题:

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

T[Any]
表示必须存在子类
Any

当您想要序列化底层类时,这种差异就开始发挥作用。
如果您只使用
\uuu
而不使用任何类型边界,您将无法使用许多Scala JSON库中的某些库。

我正在考虑关闭此库,以使其与:。我有金锤,所以我想在将其标记为副本并关闭它之前获得其他人的反馈。我只是想建议使用
或[Error,Data]
而不是
任何
@ukasz:如果它只是两种可能的返回类型(如该示例中所示),那么这两种返回类型都可以工作。对我来说,这两种方法看起来都不那么干净和易读,尤其是搭配中的
左格(废话)
东西。或者使用
的真正优势是什么?@cmbaxter这是一个非常复杂的问题/答案,我觉得它不能回答我的问题。但也许我就是不明白那里的东西。它不能回答在我的情况下更喜欢使用什么,是吗?@cmbaxter,我不会;这是一个更复杂的案件。还有一个更接近的例子,虽然
Set
不是协变的。谢谢,这有助于我进一步理解
表示我不在乎,
Any
表示我在乎,但它可以是一切。那么在我的例子中,会是什么?我想有更正确的吗?(哦,有点离题了,但你的最后一段,这是否意味着你可以序列化
Any
?)另一次尝试陈述:
T[Any]
意味着“在编译时,我们可以确定在运行时,值可能是任何值”
T[\u]
的意思是“也许我们在这里有一些编译时知识,也许我们没有,这两种方式都很好”。是的。如果有疑问,我会选择
Any
。您肯定无法序列化