在Scala中調用帶有類型參數的方法時,我經常嘗試安排代碼,以便類型推理程序可以找出有關類型參數的內容,而不需要我填寫它們。在某些情況下,它會失敗,我必須手動提供它們。大多數情況下,這不是問題,但對於具有多個類型參數的方法(例如,大多數方法需要隱式的CanBuildFrom
),我想知道是否有方法通過僅給出類型推理其中一個需要的類型參數,並要求它嘗試猜測其他的參數。它看起來像內部,它一定是做這樣的事情,因爲它有時會產生「預期類型A[B, ?]
」的錯誤消息,但得到了A[C, D]
「,這意味着在A
這兩個類型參數中,它可以找出第一個一個B
但沒有關於第二個的信息。在斯卡拉,我可以(一些SIP允許我)只指定一般類型的某些類型參數嗎?
使用案例:Tomasz’s question,在此代碼:
def firstAndLast[CC, A, That](seq: CC)(implicit asSeq: CC => Seq[A], cbf: CanBuildFrom[CC, A, That]): That = {
val b = cbf(seq)
b += seq.head
b += seq.last
b.result
}
不能List("abc", "def") map firstAndLast
被調用,而這會工作:
List("abc", "def") map firstAndLast[String, Char, String]
在這個例子中,我的問題歸結爲:有什麼辦法可以告訴類型推理:CC
參數應該是String
,並要求它自己找出關於A
和That
?喜歡的東西,在本質上,
List("abc", "def") map firstAndLast[CC = String]
或
List("abc", "def") map firstAndLast[String, <guess>, <guess>]
我知道這些線路不能正常工作;我正在尋找一種解決方法(或者爲未來的語言功能提供指導,這些功能已經被討論過並且可能導致這種情況)。
https://groups.google.com/d/topic/scala-debate/FW-Sx_S3kys/discussion – Debilski
你可以做到這一點在斯卡拉3.0,約3斯卡拉一些更多的信息:HTTPS: //groups.google.com/forum/#!topic/scala-language/PV4q6O1qIh8 – Eastsun