我是新来的斯卡拉(斯卡拉代码亚军版本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类型注释是这个代码困扰我的最后一件事。我想知道是否要解决它是不礼貌的。把注意力转移到最后一行。 –