0

Scala 関数を外部形式にエクスポートしています。この目的のために、私は と を使用scala.metaStaticAnnotationます。何かのようなもの:

@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)。

元のフォーマット/砂糖を保存する方法はありますか?

4

1 に答える 1