Особенность scala.reflect.api.Exprs.Expr
Компаньон объект Expr
особенность Expr[+T] extends Equals with Serializable
Абстрактные члены-значения
абстрактный def actualType: Universe.Type
абстрактный def in[U <: Universe with Singleton](otherMirror: Mirror[U]): in.U.Expr[T]
абстрактный val mirror: Universe.Mirror
абстрактный def splice: T
Мнимый метод для маркировки вставки выражений в переинициализации.
Он должен использоваться только в reify вызове, который устраняет вызов splice и встраивает обернутое дерево в окружающее переинициализированное выражение. Если используется отдельно splice выбрасывает исключение при вызове во время выполнения.
Если вы хотите использовать Expr при переинициализации некоторого кода Scala, необходимо его вставить. Для expr типа Expr[T], где T имеет метод foo, следующий код
reify{ expr.splice.foo }
использует splice для преобразования expr типа Expr[T] в значение типа T в контексте reify.
Он эквивалентен
Select( expr.tree, TermName("foo") )
Однако следующий пример кода не компилируется
reify{ expr.foo }
потому что expr типа Expr[T] сам по себе не имеет метода foo.
- Аннотации
- @compileTimeOnly("splice должен быть заключён в блок reify {}")
абстрактный def staticType: Universe.Type
Тип обернутого выражения дерева, предоставленный при создании.
Когда exprs создаются компилятором, staticType представляет статически известный тип дерева, вычисленный в этот момент компилятором.
абстрактный def tree: Universe.Tree
абстрактный val value: T
Мнимое значение для обозначения зависимостей типов, зависящих от этапов.
Например, для следующего определения макроса:
class X { type T }
object Macros { def foo(x: X): x.T = macro Impls.foo_impl }
Соответствующая реализация макроса должна иметь следующий тип (обратите внимание, как тип возврата обозначает зависимость от x):
object Impls { def foo_impl(c: Context)(x: c.Expr[X]): c.Expr[x.value.T] = ... }
- Аннотации
- @compileTimeOnly("нельзя использовать значение, кроме как для подписей реализаций макросов")
Члены-значения конкретного типа
final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
final def ##(): Int
- Definition Classes
- AnyRef → Any
def +(other: String): String
- Implicit
- Этот член добавлен неявно с помощью неявного преобразования из Universe.Expr[T] вany2stringadd[Universe.Expr[T]] с помощью метода any2stringadd в scala.Predef.
- Definition Classes
- any2stringadd
def ->[B](y: B): (Universe.Expr[T], B)
- Implicit
- Этот член добавлен неявно с помощью неявного преобразования из Universe.Expr[T] вArrowAssoc[Universe.Expr[T]] с помощью метода ArrowAssoc в scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
final def asInstanceOf[T0]: T0
- Definition Classes
- Any
def canEqual(x: Any): Boolean
- Definition Classes
- Expr → Equals
def clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
def ensuring(cond: (Universe.Expr[T]) => Boolean, msg: => Any): Universe.Expr[T]
- Implicit
- Этот член добавлен неявно с помощью неявного преобразования из Universe.Expr[T] вEnsuring[Universe.Expr[T]] с помощью метода Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: (Universe.Expr[T]) => Boolean): Universe.Expr[T]
- Implicit
- Этот член добавлен неявно с помощью неявного преобразования из Universe.Expr[T] вEnsuring[Universe.Expr[T]] с помощью метода Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean, msg: => Any): Universe.Expr[T]
- Implicit
- Этот член добавлен неявно с помощью неявного преобразования из Universe.Expr[T] вEnsuring[Universe.Expr[T]] с помощью метода Ensuring в scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean): Universe.Expr[T]
- Неявный
- Этот член добавлен неявным преобразованием из Universe.Expr[T] в Ensuring[Universe.Expr[T]] с помощью метода Ensuring в scala.Predef.
- Определяющие классы
- Ensuring
final def eq(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef
def equals(x: Any): Boolean
- Определяющие классы
- Expr → Equals → AnyRef → Any
def finalize(): Unit
- Атрибуты
- protected[java.lang]
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.Throwable])
def formatted(fmtstr: String): String
- Неявный
- Этот член добавлен неявным преобразованием из Universe.Expr[T] в StringFormat[Universe.Expr[T]] с помощью метода StringFormat в scala.Predef.
- Определяющие классы
- StringFormat
- Аннотации
- @inline()
final def getClass(): Class[_ <: AnyRef]
- Определяющие классы
- AnyRef → Any
- Аннотации
- @native()
def hashCode(): Int
- Определяющие классы
- Expr → AnyRef → Any
final def isInstanceOf[T0]: Boolean
- Определяющие классы
- Any
final def ne(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef
final def notify(): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @native()
final def notifyAll(): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @native()
final def synchronized[T0](arg0: => T0): T0
- Определяющие классы
- AnyRef
def toString(): String
- Определяющие классы
- Expr → AnyRef → Any
final def wait(): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException]) @native()
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/api/Exprs$Expr.html
Expr оборачивает абстрактное синтаксическое дерево и маркирует его типом. Основным источником информации об exprs является страница scala.reflect.api.Exprs.