我刚刚意识到我的通用方法:
def method[A](list: List[A]): A = { ... }
将导致非泛型函数类型
val methodFun = method _
-> methodFun : (scala.List[Nothing]) => Nothing
currying时,而不是保持其泛型类型。是否有可能保留通用类型信息?我发现我可以定义一些显式类型,例如String
通过设置
val methodFun = method[String] _
-> methodFun : (scala.List[String]) => String
但这并不是我真正想要的。我目前倾向于使用原始类型来避免这个问题(一旦我发现如何)还是有更好的解决方案?
感谢帮助!
PS:为什么我要这样做:
def method1[A](list: List[A]): A = { ... }
def method2[A](element: A): Int = { ... }
// This will not cause a compiler error as stated before
// but this will result in (List[Nothing]) => Int
// but I want a (List[A]) => Int
val composedFun = method1 _ andThen method2
// The next line is possible
// but it gives me a (List[String]) => Int
val composedFunNonGeneric = method1[String] _ andThen method2[String]