我看了type macros
scala。但是,当我想从示例中创建对象时,我得到了错误:
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)))))
}
}
Scala版本:2.10.2
来自:type macros
答案 0 :(得分:3)
如果只是那么容易!从the documentation链接到:
类型宏是所谓的宏中包含的预发布功能 天堂,官方Scala存储库中的实验分支。 按照“Macro Paradise”页面上的说明下载和 使用我们的夜间构建。
和
请注意,由于二进制兼容性限制,宏 2.10.x的天堂不包括宏观天堂的任何特征 2.11.x除了quasiquotes。
如果你想让它发挥作用,你将不得不转移到Macro Paradise分支2.11。
另请注意,类型宏文档中的...
旨在表示省略的代码 - 您不能只复制和粘贴代码。