Вопрос
В проекте 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] = ...
В качестве вашего примера иллюстрирует несколько границ контекста в одном методе подписи. Также можно комбинировать их с границами зрения.