":" в параметре типа
В проекте scala-arm я вижу такой код:
def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)
Может кто-нибудь объяснить значение [A: Resource: Manifest]?
2 ответа
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)
Вы можете посмотреть текст ссылки 7.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] = ...
Как показывает ваш пример, несколько контекстных границ могут использоваться в одной и той же сигнатуре метода. Также возможно комбинировать их с границами просмотра.