我看了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()))
Code:
//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: 类型宏
如果真那么容易就好了!从文档您链接到:
类型宏是所谓的宏中包含的预发布功能
Paradise,官方 Scala 存储库中的一个实验分支。
按照“微距天堂”页面的说明进行下载并
使用我们的夜间构建。
And:
请注意,由于二进制兼容性限制,宏
2.10.x 的天堂不包含宏天堂的任何功能
2.11.x,准引号除外。
所以你必须搬到微距天堂如果你想让它工作,请选择 2.11 的分支。
另请注意,...
类型宏文档中的 旨在指示省略的代码 - 您不能只是复制并粘贴它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)