Avez-vous trouvé cet article ? Il couvre la nouvelle fonction de liaison contextuelle, dans le cadre des améliorations apportées aux tableaux.
En général, un paramètre de type avec un lié au contexte est de la forme [T: Bound]
; il est étendu au paramètre de type simple T
ainsi qu'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 une fonction donnée f sur une plage de nombres allant de 0 à une longueur donnée. Jusqu'à Scala 2.7, tabulate pouvait être ê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, ce n'est plus possible, car des informations d'exécution sont nécessaires pour créer la bonne représentation de Array[T]
. On doit fournir cette information en passant un 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
}
Sous une forme abrégée, une lié au contexte peut être utilisé sur le paramètre de type T
au lieu de cela, donner :
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
}