我试图定义一个在参数和返回类型上都是通用的方法。基本上是为案例类的 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/