Tag: SCALA-MACROS
Estoy contribuyendo a una biblioteca de Scala 3 que realiza verificación de tipo en tiempo de compilación y me he encontrado con el siguiente problema. Tengo una jerarquía de tipos como esta: trait Match[V <: String] type Alphanumeric = Match[“^[a-zA-Z0-9]+”] trait RegexChecker[MatchType] { inline def checkRegex(text: String): Boolean } inline . . . Read more
Tengo lo siguiente, combinando coincidencia en línea y argumento por defecto: inline def func(myArg: (Int | String) = 0) = inline myArg match case i: Int => () case s: String => () Funciona bien cuando se llama sin utilizar el valor por defecto: // funciona bien func(1) Sin embargo, . . . Read more
Suponga que tengo este código para extraer el código que inicializa una variable: “`def extractBodyImpl[T: Type](expr: Expr[T])(using Quotes) = import quotes.reflect._ expr.asTerm.underlyingArgument match case ident @ Ident() => ident.symbol.tree match case ValDef(,,rhs) => println(rhs) case DefDef(,,,rhs) => println(rhs) ‘{ () } inline def extractBody[T](inline expr: T) = ${ extractBodyImpl(‘expr) } . . . Read more
¿Es posible distinguir entre las enum de Scala-3 y los traits sellados utilizando Mirrors o incluso Macros? definir transparent inline def isScalaEnum[A]: Boolean = ${ isScalaEnumImpl[A] } privado def isScalaEnumImpl[A: Type](using q: Quotes): Expr[Boolean] = ??? Por ejemplo, ¿cómo se implementa el macro anterior? sealed trait T case class A(x: . . . Read more