【发布时间】:2010-03-25 15:52:44
【问题描述】:
我是 Scala 新手(Scala 代码运行器版本 2.7.7.final),我真的不明白为什么在我们使用 high 时它要求调用者提供参数类型排序函数。
在下面的示例中,我有一个具有一个功能的独立对象 (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))
}
【问题讨论】:
-
仅对我有用 Util 对象中缺少一个 }。
-
@Thomas 之所以有效,是因为他在函数中指定了类型。 :-)
-
@Daniel 类型注释是这段代码困扰我的最后一件事。我想知道修复它是否会很粗鲁。将注意力转移到最后一行。
-
@Thomas 你还想解决什么问题吗?做就行了,没问题! :D
标签: function scala generics anonymous-function