Скальп на помощь!
Я взял этот код:
object TestThing extends App {
def one { println("one") }
def two[T] { println("two") }
def three[T : Manifest] { println("three") }
def four[T: Manifest, U : Manifest] { println("four") }
}
и провел через скальп.Вот что я получил:
object TestThing extends java.lang.Object with scala.App with scala.ScalaObject {
def this() = { /* compiled code */ }
def one : scala.Unit = { /* compiled code */ }
def two[T] : scala.Unit = { /* compiled code */ }
def three[T](implicit evidence$1 : scala.Predef.Manifest[T]) : scala.Unit = { /* compiled code */ }
def four[T, U](implicit evidence$2 : scala.Predef.Manifest[T], evidence$3 : scala.Predef.Manifest[U]) : scala.Unit = { /* compiled code */ }
}
Как видите, первый неявный манифест называется evidence$1
.Второе и третье - , хотя и в другом объеме! - называются evidence$2
и evidence$3
.Итак ... вот как вы ссылаетесь на Манифесты.
Несмотря на это, мне немного страшно, что удаление Манифеста, который находится выше в классе, изменит название Манифеста, которыйнаходится ниже в файле.Точно так же не помогает то, что подсветка синтаксиса плагина IntelliJ Scala, кажется, думает, что переменные манифеста в области видимости в four()
равны evidence$1
и evidence$2
, и не думают, что evidence$3
является допустимымпеременная есть (хотя она есть, а evidence$1
нет).В целом, может быть, к этим вещам следует относиться как к предупреждающим знакам об игре с неявными переменными Manifest?