scala - 如何在Scala控制台中使用宏?

标签 scala macros metaprogramming scala-3 dotty

在 Scala 3 控制台(或 Scastie)中,运行以下代码时:

import scala.quoted._

val a = Expr("Hello")

以下错误结果:

-- Error: ----------------------------------------------------------------------
1 |val a = Expr("Hello")
  |                     ^
  |No given instance of type quoted.Quotes was found for parameter x$3 of method apply in object Expr
1 error found

在控制台中使用宏是否需要执行额外的步骤?

最佳答案

事实证明我误解了引用机制。在控制台中运行的最小示例的上下文中,引用应该在返回之前进行拼接:

import scala.quoted.*

def getQuote()(using Quotes) = '{ "a quote" }

inline def getSplice() = ${ getQuote() }

然后可以从控制台评估拼接的报价:

getSplice()     // returns "a quote"

但是,无法直接计算引用,从而导致前面的错误:

getQuote()      // errors out

关于scala - 如何在Scala控制台中使用宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76316882/

相关文章:

scala - 隐式搜索不指导类型推断在 Scala 中查找父类(super class)型

Scala 将 Map[Int, Future[Seq[T]]] 转换为 Future[Map[Int, Seq[T]]]

ruby-on-rails - 有没有办法在循环内部知道您是否处于最终迭代?

c++ - 元组处理中的模板函数错误

C++ 部分特化不适用于不同大小的特征矩阵

Scala:包对象v.s.包内的单例对象

Scala 和 Java - 隐式参数和继承

c - 奇怪的宏结构

C++ 模板和预处理宏

c++ - 在类定义的开头这个宏是做什么用的?