我正在将 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
)。
有没有办法保留原始格式/糖?