Soy nuevo en Scala (corrector de código Scala versión 2.7.7.final), y realmente no entiendo por qué requiere la persona que llama para proporcionar el tipo de parámetro cuando estamos utilizando funciones de orden superior.Valores de función genéricos de Scala (función anónima) - Falta el tipo de parámetro (error)
En el ejemplo siguiente, tengo un objeto independiente (Util
) que tiene una función. Pero en el bloque Main
, la persona que llama debe pasar el tipo de parámetro a la función anónima.
¿Por qué Scala no infiere el tipo de la función del tipo Array
(es decir, String
)? Hay alguna forma de hacer eso ?
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))
}
Solo faltan los trabajos para mí} en el objeto Util. –
@Thomas funciona porque él especificó el tipo en la función. :-) –
@Daniel La anotación de tipo es lo último que me molesta con este código. Me pregunto si sería grosero arreglarlo. Perdió la atención hasta la última línea. –