Spec-Zone.ru › Scala 2.13 Reflection

Трейт scala.reflect.macros.Evals

trait Evals extends AnyRef

ЭКСПЕРИМЕНТАЛЬНО

Срезок контекста макросов Scala, предоставляющий возможность оценивать деревья.

Self Type
blackbox.Context
Source
Evals.scala
Linear Supertypes
AnyRef, Any
Known Subclasses
Context, Context

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

abstract def eval[T](expr: blackbox.Context.Expr[T]): T

Принимает типизированную обёртку для дерева типа T и вычисляет его в значение типа T.

Может использоваться для выполнения вычислений во время компиляции над аргументами макроса в той мере, в какой это допускается формой аргументов.

Известные проблемы: из-за https://github.com/scala/bug/issues/5748 деревья, которые оцениваются в первую очередь, должны пройти untypecheck. Переустановка символов и типов изменяет дерево на месте, поэтому общепринятый подход — duplicate дерево сначала.

scala> def impl(c: Context)(x: c.Expr[String]) = {
     | val x1 = c.Expr[String](c.untypecheck(x.tree.duplicate))
     | println(s"compile-time value is: ${c.eval(x1)}")
     | x
     | }
impl: (c: Context)(x: c.Expr[String])c.Expr[String]

scala> def test(x: String) = macro impl
test: (x: String)String

scala> test("x")
compile-time value is: x
res0: String = x

scala> test("x" + "y")
compile-time value is: xy
res1: String = xy

scala> val x = "x"
x: String = x

scala> test(x + "y")
compile-time value is: xy
res2: String = xy

scala> { val x = "x"; test(x + "y") }
error: exception during macro expansion:
scala.tools.reflect.ToolBoxError: reflective compilation failed

Обратите внимание, что в последнем случае оценка не удалась, потому что аргумент макроса относится к значению выполнения x, которое неизвестно во время компиляции.

Члены конкретных значений

final def !=(arg0: Any): Boolean

Определение классов
AnyRef → Any

final def ##(): Int

Определение классов
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вany2stringadd[Evals] с помощью метода any2stringadd в scala.Predef.
Определение классов
any2stringadd

def ->[B](y: B): (Evals, B)

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вArrowAssoc[Evals] с помощью метода ArrowAssoc в scala.Predef.
Определение классов
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Определение классов
AnyRef → Any

final def asInstanceOf[T0]: T0

Определение классов
Any

def clone(): AnyRef

Атрибуты
protected[java.lang]
Определение классов
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()

def ensuring(cond: (Evals) => Boolean, msg: => Any): Evals

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вEnsuring[Evals] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: (Evals) => Boolean): Evals

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вEnsuring[Evals] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: Boolean, msg: => Any): Evals

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вEnsuring[Evals] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

def ensuring(cond: Boolean): Evals

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вEnsuring[Evals] с помощью метода Ensuring в scala.Predef.
Определение классов
Ensuring

final def eq(arg0: AnyRef): Boolean

Определение классов
AnyRef

def equals(arg0: AnyRef): Boolean

Определение классов
AnyRef → Any

def finalize(): Unit

Атрибуты
protected[java.lang]
Определение классов
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])

def formatted(fmtstr: String): String

Неявный
Этот член добавлен с помощью неявного преобразования из Evals вStringFormat[Evals] с помощью метода StringFormat в scala.Predef.
Определение классов
StringFormat
Аннотации
@inline()

final def getClass(): Class[_ <: AnyRef]

Definition Classes
AnyRef → Any
Annotations
@native()

def hashCode(): Int

Definition Classes
AnyRef → Any
Annotations
@native()

final def isInstanceOf[T0]: Boolean

Definition Classes
Any

final def ne(arg0: AnyRef): Boolean

Definition Classes
AnyRef

final def notify(): Unit

Definition Classes
AnyRef
Annotations
@native()

final def notifyAll(): Unit

Definition Classes
AnyRef
Annotations
@native()

final def synchronized[T0](arg0: => T0): T0

Definition Classes
AnyRef

def toString(): String

Definition Classes
AnyRef → Any

final def wait(): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Definition Classes
AnyRef
Annotations
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Definition Classes
AnyRef
Annotations
@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/macros/Evals.html

Spec-Zone.ru

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