2010-09-26 25 views
8

, görüyorum böyle kod:":" tipi parametresinde Scala-kol projesinde

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

birisi anlamını açıklayabilir [A: Kaynak: Manifest]?

+4

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

cevap

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

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

Daha fazla bilgi için link text7.4 Bağlam Sınır ve Görünüm Sınırlarını bakmak anlamına gelir. göstermek için basit bir örnek kullanarak,

4

:

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

notasyonu T : Manifest bağlanmış bir bağlam olduğu anlamına gelir. Programınızın başka bir yerinde, kapsam dahilinde, örtülü olarak işaretlenmiş bir tekil veya Manifest[T] türünün değeri tanımlanmalıdır.

Bu

bir ikinci (örtük) parametre bloğu kullanımı yöntem imzası yeniden derleyici tarafından elde edilir: En örnek,

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

gibi, birden fazla bağlam sınır aynı yöntem imza olarak kullanılabilir. Bunları görüş sınırları ile birleştirmek de mümkündür.

İlgili konular