【发布时间】:2026-01-24 13:50:01
【问题描述】:
我正在将 Scala 函数导出为外部格式。为此,我使用scala.meta 和StaticAnnotation。比如:
@ExportFunctions
object MyFunctions {
def max(x: Int, y: Int): Int = x max y
}
class ExportFunctions extends StaticAnnotation {
inline def apply(defn: Any): Any = meta {
defn match {
case q"object $name extends { ..$earlydefns } with ..$parents { ..$stats }" =>
stats.flatMap{
case defn@Defn.Def(modifiers, fname, tparams, paramss, Some(returnType), body) =>
println(body.syntax)
}
case _ =>
}
defn
}
}
在ExportFunctions extends StaticAnnotation 的实现中,函数体表示为一棵脱糖树:x.max(y)。
但是,出于文档目的,拥有实际源代码会更好。或者至少是糖(x max y)。
有没有办法保留原始格式/糖?
【问题讨论】:
标签: scala macros scala-macros scala-macro-paradise scalameta