我是新來的斯卡拉(斯卡拉代碼亞軍版本2.7.7.final),我真的不明白爲什麼它需要調用者當我們使用高階函數時提供參數類型。斯卡拉通用函數值(匿名函數) - 缺少參數類型(錯誤)
在下面的示例中,我有一個獨立的對象(Util
),它具有一個功能。但是在Main
塊中,調用者必須將參數類型傳遞給匿名函數。
爲什麼Scala不能從Array
類型(即String
)推斷出函數的類型?有沒有辦法做到這一點?
object Util {
// Just for fun! Suppose that the arrayOne and arrayTwo are all the same length.
// will swap the elements from arrayOne to ArrayTwo.
def swap[T](arrayOne:Array[T], arrayTwo:Array[T] , f:(T,T) =>(T,T)) {
for(i <- 0 until (arrayOne.length min arrayTwo.length)){
val (left, right) = f(arrayOne(i),arrayTwo(i))
arrayOne(i) = left
arrayTwo(i) = right
}
}
}
object Main extends Application {
val arrayOne = Array("A","B","C")
val arrayTwo = Array("D","E","F")
//If not specified the type String,the compiler throws "Missing Parameter Type" error
Util swap(arrayOne, arrayTwo,(elem1:String,elem2:String)=>(elem2,elem1))
}
對我來說只有a}在Util對象中缺失。 –
@Thomas它的工作原理是因爲他在函數中指定了類型。 :-) –
@Daniel類型註釋是這個代碼困擾我的最後一件事。我想知道是否要解決它是不禮貌的。把注意力轉移到最後一行。 –