1
我才意識到,我的泛型方法:鑽營泛型方法/功能沒有鬆動的泛型參數
def method[A](list: List[A]): A = { ... }
將導致非通用功能型
val methodFun = method _
-> methodFun : (scala.List[Nothing]) => Nothing
時討好它,而不是保持它的泛型類型。是否有可能保留泛型類型信息?我發現我可以通過設置
val methodFun = method[String] _
-> methodFun : (scala.List[String]) => 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]
它沒有意義,因爲寫的,但在一般情況下,它是有道理的。要麼因爲有多個參數,要麼因爲我想編寫函數。 –
忽略我的第一個評論:這不是curring,它是eta-expansion。 ;)我看到它的感覺。 – itsbruce