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]?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top