Eri*_*her 4 scala scala-2.10 scala-macros
我想得到一个宏的调用类,但我的代码不起作用:
def __CLASS__(c: Context) = {
import c.universe._
c.enclosingClass match {
case ClassDef(mods, name, tparams, impl) =>
c.universe.reify(println(
"\n mods "+c.literal(mods.toString).splice
+"\n name "+c.literal(name.toString).splice
+"\n tparams "+c.literal(tparams.toString).splice
+"\n impl "+c.literal(impl.toString).splice
))
case _ => c.abort(c.enclosingPosition, "NoEnclosingClass")
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
当从一个普通的类实例中调用时,这将按原样工作,所以我假设你是从一个对象内部尝试它,在这种情况下你需要匹配ModuleDef以及ClassDef:
case ModuleDef(mods, name, impl) => c.universe.reify(
printf(
"\n mods %s\n name %s\n impl %s\n",
c.literal(mods.toString).splice,
c.literal(name.toString).splice,
c.literal(impl.toString).splice
)
)
Run Code Online (Sandbox Code Playgroud)
请注意,调试此类内容的一种简单方法是打印出您所获得的任何意外事件的原始表示:
case x => c.abort(c.enclosingPosition, "NoEnclosingClass: " + showRaw(x))
Run Code Online (Sandbox Code Playgroud)
当在单例对象内部调用时,这将打印以下内容:
<console>:7: error: NoEnclosingClass: ModuleDef(Modifiers(), ...
Run Code Online (Sandbox Code Playgroud)
这让我们非常了解我们需要从哪里开始.
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |