如何解决我可以控制在 Scala 3 中编译宏的顺序吗?
假设我想在 Scala 3 中使用宏来计算代码中使用某个方法 client.queryMessages(podId: 7)
的位置:
doSomething()
我有一个使用 // Macros.scala
import scala.quoted.{Expr,Quotes}
object Macros {
private var count: Int = 0
inline def doSomething() = ${increment()}
private def increment()(using Quotes) =
count = count + 1
Expr("some result")
inline def callCount() = ${getCount()}
private def getCount()(using Quotes) =
Expr(count)
}
几次的对象:
doSomething()
// Runner.scala
object Runner {
def run() =
Macros.doSomething()
Macros.doSomething()
Macros.doSomething()
}
根据编译这些宏的顺序,main 函数将打印 0 或 3。如果我能控制这个顺序,我会指示编译器最后编译 // Main.scala
object Main {
def main(args: Array[String]): Unit =
println(Macros.callCount())
}
,这样我就可以得到预期值 3。这可能吗?
解决方法
不,没有办法控制它,你只是不能写那种代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。