Trait scala.reflect.api.Exprs.Expr
Companion object Expr
trait Expr[+T] extends Equals with Serializable
Abstract Value Members
abstract def actualType: Universe.Type
abstract def in[U <: Universe with Singleton](otherMirror: Mirror[U]): in.U.Expr[T]
abstract val mirror: Universe.Mirror
abstract def splice: T
A dummy method to mark expression splicing in reification.
It should only be used within a reify
call, which eliminates the splice
call and embeds the wrapped tree into the reified surrounding expression. If used alone splice
throws an exception when called at runtime.
If you want to use an Expr in reification of some Scala code, you need to splice it in. For an expr of type Expr[T]
, where T
has a method foo
, the following code
reify{ expr.splice.foo }
uses splice to turn an expr of type Expr[T] into a value of type T in the context of reify
.
It is equivalent to
Select( expr.tree, TermName("foo") )
The following example code however does not compile
reify{ expr.foo }
because expr of type Expr[T] itself does not have a method foo.
- Annotations
- @compileTimeOnly("splice must be enclosed within a reify {} block")
abstract def staticType: Universe.Type
Type of the wrapped expression tree as provided during creation.
When exprs are created by the compiler, staticType
represents a statically known type of the tree as calculated at that point by the compiler.
abstract def tree: Universe.Tree
abstract val value: T
A dummy value to denote cross-stage path-dependent type dependencies.
For example for the following macro definition:
class X { type T } object Macros { def foo(x: X): x.T = macro Impls.foo_impl }
The corresponding macro implementation should have the following signature (note how the return type denotes path-dependency on x):
object Impls { def foo_impl(c: Context)(x: c.Expr[X]): c.Expr[x.value.T] = ... }
- Annotations
- @compileTimeOnly("cannot use value except for signatures of macro implementations")
Concrete Value Members
final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
final def ##(): Int
- Definition Classes
- AnyRef → Any
def +(other: String): String
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toany2stringadd[Universe.Expr[T]] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
def ->[B](y: B): (Universe.Expr[T], B)
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toArrowAssoc[Universe.Expr[T]] performed by method ArrowAssoc in 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
- This member is added by an implicit conversion from Universe.Expr[T] toEnsuring[Universe.Expr[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: (Universe.Expr[T]) => Boolean): Universe.Expr[T]
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toEnsuring[Universe.Expr[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean, msg: => Any): Universe.Expr[T]
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toEnsuring[Universe.Expr[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean): Universe.Expr[T]
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toEnsuring[Universe.Expr[T]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
def equals(x: Any): Boolean
- Definition Classes
- Expr → Equals → AnyRef → Any
def finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from Universe.Expr[T] toStringFormat[Universe.Expr[T]] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
def hashCode(): Int
- Definition Classes
- Expr → AnyRef → Any
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
- Expr → 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/api/Exprs$Expr.html
Expr wraps an abstract syntax tree and tags it with its type. The main source of information about exprs is the scala.reflect.api.Exprs page.