":" в параметре типа

В проекте 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] = ...

Как показывает ваш пример, несколько контекстных границ могут использоваться в одной и той же сигнатуре метода. Также возможно комбинировать их с границами просмотра.

Другие вопросы по тегам