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
)。
元のフォーマット/砂糖を保存する方法はありますか?