考慮下面的代碼:(見下文,需要解決的實際代碼)與函數類型Scala的類型推斷
def applyAll[T,S, U <: Seq[T => S]](l : U, x: T) = l.map(f => f(x))
val u = List((i: Int) => i + 1, (i: Int) => i + 2)
println(applyAll(u,1))
(給出的T => S
一個Seq
和價值,我們期望得到funtions應用於此值)。
雖然applyAll
編譯罰款,稱這是對u
提供了以下錯誤:
Error:(35, 13) inferred type arguments [Int,Nothing,List[Int => Int]] do not conform to method applyAll's type parameter bounds [T,S,U <: Seq[T => S]]
println(applyAll(u,1))
^
這表明編譯器無法推斷出類型參數S
,我猜是因爲它是「套'在函數類型T => S
內。
編輯:
我試圖解決實際的代碼相似(雖然複雜),並不能除去在U參數是固定的。在這裏:
def applyNatural[T, S, Repr <: TraversableLike[T => S, Repr], That]
(data: T, jobs: Repr)
(implicit bf: CanBuildFrom[Repr, S, That]): That = {
jobs.map(f => f(data))
}
val u = List((i: Int) => i + 1, (i: Int) => i + 2)
val v = applyNatural(1, u)
println(v)
我看到兩個問題編輯代碼:首先,再版是循環。要解決Repr,你必須查找Repr。其次,沒有建立。 –
你究竟想要做什麼? –
我正在創建一個函數,它可以將一個函數集合應用到一個值,並返回一個相同類型的值的集合。 –