« : » Dans le paramètre de type
-
05-10-2019 - |
Question
Dans projet scala-bras, je vois le code comme ceci:
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)
Quelqu'un peut-il expliquer le sens de [A: Ressource: Manifest]?
La solution
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)
un moyen
def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener)
Vous pouvez regarder texte de lien 7.4 Contexte et Bounds Voir Bounds pour plus d'informations.
Autres conseils
En utilisant un exemple simple pour illustrer:
def method[T : Manifest](param : T) : ResultType[T] = ...
Les moyens de T : Manifest
de notation qu'il ya un contexte lié . Ailleurs dans votre programme, portée, doit définir un singleton ou valeur de type Manifest[T]
qui est marqué comme implicite.
Ceci est réalisé par le compilateur réécriture de la signature de la méthode pour utiliser un deuxième bloc de paramètres (implicite):
def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ...
En tant que votre exemple illustre, les limites de contexte multiples peut être utilisé dans la même signature. Il est également possible de les combiner avec des bornes de vue.