2010-09-26 21 views
8

In scala-Arm Projekt sehe ich Code wie folgt:":" in Typ-Parameter

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

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

+4

http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala – retronym

Antwort

18
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 link text7.4 Context Bounds und Ansicht Bounds für weitere Informationen suchen.

4

ein einfacheres Beispiel für die Verwendung zu veranschaulichen:

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

Die Notation T : Manifest bedeutet, dass es ein Kontext gebunden ist. An anderer Stelle in Ihrem Programm muss im Gültigkeitsbereich ein Singleton oder Wert vom Typ Manifest[T] definiert werden, der als implizit markiert ist.

Dies wird durch die Compiler Umschreiben der Methodensignatur einen zweiten (impliziten) Parameterblock zu verwenden, erreicht:

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

Als Ihr Beispiel veranschaulicht, können mehrere Kontextgrenzen in der gleichen Methodensignatur verwendet werden. Es ist auch möglich, sie mit Blickgrenzen zu kombinieren.

Verwandte Themen