加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 获取调用类

发布时间:2020-12-16 10:03:47 所属栏目:安全 来源:网络整理
导读:我想得到一个宏的调用类,但我的代码不起作用: 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 "
我想得到一个宏的调用类,但我的代码不起作用:

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")
    }
}

在此先感谢您的帮助.

解决方法

当从一个普通的类实例中调用时,这将按原样工作,所以我假设你是从一个对象内部尝试它,在这种情况下你需要匹配 ModuleDef以及ClassDef:

case ModuleDef(mods,impl) => c.universe.reify(
  printf(
    "n  mods %sn  name %sn  impl %sn",c.literal(mods.toString).splice,c.literal(name.toString).splice,c.literal(impl.toString).splice
  )
)

请注意,调试此类内容的一种简单方法是打印出您所获得的任何意外事件的原始表示:

case x => c.abort(c.enclosingPosition,"NoEnclosingClass: " + showRaw(x))

当在单例对象内部调用时,这将打印以下内容:

<console>:7: error: NoEnclosingClass: ModuleDef(Modifiers(),...

这让我们非常了解我们需要从哪里开始.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读