2012-10-08 18 views
27

[A : Manifest : WireFormat]在以下代碼中的含義是什麼?它來自com.nicta.scoobi.TextInput(在github上可用)。它似乎沒有任何通常的類型邊界。Scala類參數化中額外冒號的含義

def fromDelimitedTextFile[A : Manifest : WireFormat] 
     (path: String, sep: String = "\t") 
     (extractFn: PartialFunction[List[String], A]) 
    : DList[A] = { 

    val lines = fromTextFile(path) 
    lines.flatMap { line => 
     val fields = line.split(sep).toList 
     if (extractFn.isDefinedAt(fields)) List(extractFn(fields)) else Nil 
    } 
    } 

我在哪裏可以找到關於此主題的更多信息?

回答

35

這被稱爲上下文綁定。他們是語法糖的隱含參數列表:

def meth[A : ContextBound1 : ContextBoundN](a: A) 

// ==> 

def meth[A](a: A)(implicit evidence: ContextBound1[A], ContextBoundN[A]) 

如果有多個方面,從1界限以N,它們都被轉換成相同的參數列表。請參閱this question以獲取關於它們如何工作以及它們的用途的更詳細說明。

要找到這樣的符號,閱讀StackOverflow Scala Tutorial是有用的。