Значение дополнительного двоеточия в параметризации Scala
Что означает [A : Manifest : WireFormat]
в следующем коде? Это от com.nicta.scoobi.TextInput
(доступно на github). Это не похоже на обычные ограничения типов.
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
}
}
Где я могу найти дополнительную информацию по этой теме?
Ответы
Ответ 1
Это называется границей контекста. Они представляют собой синтаксический сахар для неявного списка параметров:
def meth[A : ContextBound1 : ContextBoundN](a: A)
// ==>
def meth[A](a: A)(implicit evidence: ContextBound1[A], ContextBoundN[A])
Если существует несколько границ контекста от 1 до N, все они переводятся в один список параметров. См. этот вопрос для более подробного объяснения того, как они работают и для чего они полезны.
Чтобы найти такие символы, полезно прочитать fooobar.com/info/tagged/....