Подтвердить что ты не робот

Значение дополнительного двоеточия в параметризации 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
    }
  }

Где я могу найти дополнительную информацию по этой теме?

4b9b3361

Ответ 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/....