Avez-vous trouvé cet article ? Il couvre la nouvelle fonctionnalité liée au contexte, dans le contexte des améliorations des tableaux.
En général, un paramètre de type avec un contexte lié est de la forme [T: Bound]
; il est développé en paramètre de type simple T
avec un paramètre implicite de type Bound[T]
.
Considérons la méthode tabulate
qui forme un tableau à partir des résultats de l'application d'une fonction f donnée sur une plage de nombres de 0 jusqu'à une longueur donnée. Jusqu'à Scala 2.7, le tableau pouvait être écrit comme suit:
def tabulate[T](len: Int, f: Int => T) = {
val xs = new Array[T](len)
for (i <- 0 until len) xs(i) = f(i)
xs
}
Dans Scala 2.8, cela n'est plus possible, car les informations d'exécution sont nécessaires pour créer la bonne représentation de Array[T]
. Il faut fournir ces informations en passant a ClassManifest[T]
dans la méthode en tant que paramètre implicite:
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
}
En tant que forme abrégée, un contexte lié peut être utilisé sur le paramètre type à la T
place, donnant:
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
}