Spec-Zone.ru › Scala 2.13 Reflection

Особенность scala.reflect.api.Exprs.Expr

Компаньон объект Expr

особенность Expr[+T] extends Equals with Serializable

Expr оборачивает абстрактное синтаксическое дерево и маркирует его типом. Основным источником информации об exprs является страница scala.reflect.api.Exprs.

Источник
Exprs.scala
Линейные супертипы
java.io.Serializable, Equals, AnyRef, Any

Абстрактные члены-значения

абстрактный 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API