私は Scala ( Scala コード ランナー バージョン 2.7.7.final ) を初めて使用しますが、高階関数を使用しているときに呼び出し元がパラメーターの型を指定する必要がある理由がよくわかりません。
以下のサンプルでは、1 つの関数を持つ 1 つのスタンドアロン オブジェクト ( 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))
}