Вопрос

В проекте Scala-Arm я вижу такой код:

def managed[A : Resource : Manifest](opener : => A) : ManagedResource[A] = new DefaultManagedResource(opener)

Может кто-то объяснить значение [A: Resource: Манифест]?

Это было полезно?

Решение

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] = ...

В качестве вашего примера иллюстрирует несколько границ контекста в одном методе подписи. Также можно комбинировать их с границами зрения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top