type macros
スカラを探しました。しかし、例からオブジェクトを作成したい場合、エラーが発生しました:
Example.scala:7: `=', `>:', or `<:' expected
type Test(url: String) = macro impl
Example.scala:12: illegal start of simple expression
val clazz = ClassDef(..., Template(..., generateCode()))
コード:
//Example.sbt
object Example {
type Test(url: String) = macro impl
def impl(c:Context)(url: c.Expr[String]):c.Tree = {
import c.universe._
val name = c.freshName(c.enclosingImpl.name).toTypeName
val clazz = ClassDef(..., Template(..., generateCode()))
c.introduceTopLevel(c.enclosingPackage.pid.toString, clazz)
val classRef = Select(c.enclosingPackage.pid, name)
Apply(classRef, List(Literal(Constant(c.eval(url)))))
}
}
スカラのバージョン: 2.10.2
From:タイプマクロ