scala - 当一个是返回值时如何推断类型?

标签 scala

我试图定义一个在参数和返回类型上都是通用的方法。基本上是为案例类的 JSON 序列化创建一个辅助函数。

所以我想写一些像这样的伪代码:

def post[Request,Response](data:Request) : Response = ???

case class A(i:String)
case class B(j:Int)

val result = post[A,B]("input")

在这种情况下(假设没有错误)结果是类型B。

编译器无法推断返回值,这是可以理解的,但我希望它能够推断请求类型。换句话说,我想写一些类似的东西

val result = post[B]("input")

其中A的类型由data参数推断,因此用户在调用函数时只需指定返回类型。

最佳答案

我具体不知道 Scala 的很多细节,但在 Haskell 中,这种能力是通过一个名为“函数依赖”的编译器选项启用的,其中你有一个带有两个类型变量的类型类,其中一个可以从另一个派生- 请参阅 http://www.haskell.org/ghc/docs/6.6/html/users_guide/type-extensions.html 的第 7.4.3 节。显然,您不能只使用此功能,因为它使用不同的语言,但知道它的名称应该可以帮助您找到解决方案。例如,Functional dependencies in Scala看起来是个不错的猜测;不过,我对 Scala 的了解还不够,无法阅读该文章,也无法准确地告诉您如何回答最初的 JSON 问题。

关于scala - 当一个是返回值时如何推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340793/

相关文章:

scala - 从 String 创建 typeTag 并将其传递给多态方法

scala - Scala 中出现 `cannot resolve symbol` 错误的通用方法

scala - Spark:内存密集型联接操作的最佳实践

scala - 如何将案例类放入 rdd 中并使其表现得像元组(对)?

scala - 无形类型转换上的模式匹配好吗?

function - 函数类型可以通过推理来定义吗?

scala - Play2 + 卡斯巴 : How to provide an implicit Writes for ObjectId

scala - 为什么在 LiftWeb/Scala 中使用 Box/Option 而不是 Exception?

parsing - Scala 解析 SML 的相互递归函数

scala - 在 intellij 中使用 scala 项目缓慢编译 play 框架