scala.compiletime
Value members
Concrete methods
Assertion that an argument is by-name. Used for nullability checking.
Assertion that an argument is by-name. Used for nullability checking.
- Source:
- package.scala
Returns the string representation of argument code:
Returns the string representation of argument code:
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
inline def logged(inline p1: Any) =
("code: " + codeOf(p1), p1)
logged(identity("foo"))
// above is equivalent to:
// ("code: scala.Predef.identity("foo")", identity("foo"))
}
The formatting of the code is not stable across version of the compiler.
- Note:
only
inline
arguments will be displayed as "code". Other values may display unintutively.- Source:
- package.scala
Given a constant, singleton type T
, convert it to a value
of the same singleton type. For example: assert(constValue[1] == 1)
.
Given a constant, singleton type T
, convert it to a value
of the same singleton type. For example: assert(constValue[1] == 1)
.
- Source:
- package.scala
Same as constValue
but returns a None
if a constant value
cannot be constructed from the provided type. Otherwise returns
that value wrapped in Some
.
Same as constValue
but returns a None
if a constant value
cannot be constructed from the provided type. Otherwise returns
that value wrapped in Some
.
- Source:
- package.scala
Given a tuple type (X1, ..., Xn)
, returns a tuple value
(constValue[X1], ..., constValue[Xn])
.
Given a tuple type (X1, ..., Xn)
, returns a tuple value
(constValue[X1], ..., constValue[Xn])
.
- Source:
- package.scala
Use this method when you have a type, do not have a value for it but want to
pattern match on it. For example, given a type Tup <: Tuple
, one can
pattern-match on it as follows:
Use this method when you have a type, do not have a value for it but want to
pattern match on it. For example, given a type Tup <: Tuple
, one can
pattern-match on it as follows:
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
type Tup
inline def f = {
inline erasedValue[Tup] match {
case _: EmptyTuple => ???
case _: (h *: t) => ???
}
}
}
This value can only be used in an inline match and the value cannot be used in the branches.
- Source:
- package.scala
The error method is used to produce user-defined compile errors during inline expansion. If an inline expansion results in a call error(msgStr) the compiler produces an error message containing the given msgStr.
The error method is used to produce user-defined compile errors during inline expansion. If an inline expansion results in a call error(msgStr) the compiler produces an error message containing the given msgStr.
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
error("My error message")
}
or
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
inline def errorOnThisCode(inline x: Any) =
error("My error of this code: " + codeOf(x))
}
- Source:
- package.scala
Checks at compiletime that the provided values is a constant after inlining and constant folding.
Checks at compiletime that the provided values is a constant after inlining and constant folding.
Usage:
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
inline def twice(inline n: Int): Int =
requireConst(n) // compile-time assertion that the parameter `n` is a constant
n + n
twice(1)
val m: Int = ???
twice(m) // error: expected a constant value but found: m
}
- Source:
- package.scala
Given a tuple T, summons each of its member types and returns them in a Tuple.
Given a tuple T, summons each of its member types and returns them in a Tuple.
- Type parameters:
- T
the tuple containing the types of the values to be summoned
- Returns:
the given values typed as elements of the tuple
- Source:
- package.scala
Summons first given matching one of the listed cases. E.g. in
Summons first given matching one of the listed cases. E.g. in
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
type A
trait B
type C
inline def f = {
given B with { }
summonFrom {
case given A => 1
case given B => 2
case given C => 3
case _ => 4
}
}
}
the returned value would be 2
.
- Source:
- package.scala
Summon a given value of type T
. Usually, the argument is not passed explicitly.
The summoning is delayed until the call has been fully inlined.
Summon a given value of type T
. Usually, the argument is not passed explicitly.
The summoning is delayed until the call has been fully inlined.
- Type parameters:
- T
the type of the value to be summoned
- Returns:
the given value typed as the provided type parameter
- Source:
- package.scala
Used as the initializer of a mutable class or object field, like this:
Used as the initializer of a mutable class or object field, like this:
package scala.compiletime
trait Snippet0 { self: compiletime.package$package.type =>
type T
var x: T = uninitialized
}
This signifies that the field is not initialized on its own. It is still initialized
as part of the bulk initialization of the object it belongs to, which assigns zero
values such as null
, 0
, 0.0
, false
to all object fields.
- Source:
- package.scala
Extensions
Extensions
Casts a value to be Matchable
. This is needed if the value's type is an unconstrained
type parameter and the value is the scrutinee of a match expression.
This is normally disallowed since it violates parametricity and allows
to uncover implementation details that were intended to be hidden.
The asMatchable
escape hatch should be used sparingly. It's usually
better to constrain the scrutinee type to be Matchable
in the first place.
Casts a value to be Matchable
. This is needed if the value's type is an unconstrained
type parameter and the value is the scrutinee of a match expression.
This is normally disallowed since it violates parametricity and allows
to uncover implementation details that were intended to be hidden.
The asMatchable
escape hatch should be used sparingly. It's usually
better to constrain the scrutinee type to be Matchable
in the first place.
- Source:
- package.scala