2010-09-26 59 views
8

斯卡拉臂的項目,我看到這樣的代碼:「:」在類型參數

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

有人能解釋的意義[A:資源:清單]

+4

http://stackoverflow.com/questions/2982276/what-is-a-context-bound-in-scala – retronym 2010-09-26 15:23:41

回答

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) 

你可以看看link text7.4語境界和下界查看以獲取更多信息。

4

使用一個更簡單的例子來說明:

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

記號T : Manifest意味着存在綁定一個上下文。在程序中的其他地方,在範圍內,必須定義一個單標記或Manifest[T]類型的值,並將其標記爲隱式。

這是由編譯器重寫方法簽名使用第二(隱含的)參數塊來實現的:

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

作爲你的實施例說明,多個上下文的邊界可以在相同的方法簽名中使用。也可以將它們與視圖邊界相結合。