¿Encontraste este artículo ? Cubre la nueva función vinculada al contexto, dentro del contexto de las mejoras de la matriz.
Generalmente, un parámetro de tipo con un límite de contexto tiene la forma [T: Bound]
; se expande a un parámetro de tipo plano T
junto con un parámetro implícito de tipo Bound[T]
.
Considere el método tabulate
que forma una matriz a partir de los resultados de aplicar una función f dada en un rango de números desde 0 hasta una longitud determinada. Hasta Scala 2.7, el tabulado se podría escribir de la siguiente manera:
def tabulate[T](len: Int, f: Int => T) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}
En Scala 2.8 esto ya no es posible, porque la información en tiempo de ejecución es necesaria para crear la representación correcta de Array[T]
. Es necesario proporcionar esta información pasando un ClassManifest[T]
en el método como un parámetro implícito:
def tabulate[T](len: Int, f: Int => T)(implicit m: ClassManifest[T]) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}
Como forma abreviada, se puede usar un enlace de contexto en el parámetro de tipo T
, dando:
def tabulate[T: ClassManifest](len: Int, f: Int => T) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}