8 Stimmen

":" im Typ-Parameter

Im Projekt scala-arm sehe ich einen Code wie diesen:

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

Kann jemand die Bedeutung von [A : Ressource : Manifest] erklären?

18voto

Eastsun Punkte 17666
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

bedeutet

def managed[A](opener : => A)(implicit r: Resource[A], m: Manifest[A]) : ManagedResource[A] = new DefaultManagedResource(opener)

Sie können sich Linktext 7.4 Kontextgrenzen und Ansichtsgrenzen für weitere Informationen.

4voto

Kevin Wright Punkte 49145

Zur Veranschaulichung ein einfacheres Beispiel:

def method[T : Manifest](param : T) : ResultType[T] = ...

Die Notation T : Manifest bedeutet, dass es eine kontextgebunden . An anderer Stelle in Ihrem Programm, im Geltungsbereich, muss ein Singleton oder ein Wert des Typs Manifest[T] die als implizit gekennzeichnet ist.

Dies wird dadurch erreicht, dass der Compiler die Signatur der Methode so umschreibt, dass ein zweiter (impliziter) Parameterblock verwendet wird:

def method[T](param : T)(implicit x$1 : Manifest[T]) : ResultType[T] = ...

Wie Ihr Beispiel zeigt, können mehrere Kontextgrenzen in derselben Methodensignatur verwendet werden. Es ist auch möglich, sie mit View Bounds zu kombinieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X