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

scala – 是否可以推迟宏扩展,直到抽象类型绑定到特定类型

发布时间:2020-12-16 18:32:54 所属栏目:安全 来源:网络整理
导读:我可能使用了不正确的术语,但这里是我想要实现的示例.可以说我有以下宏: def generateField[T]: AnyRef = macro generateFieldImpl[T]def generateFieldImpl[T: c.AbsTypeTag](c: Context): c.Expr[AnyRef] = {/** * here I'm looking at the type T by ref
我可能使用了不正确的术语,但这里是我想要实现的示例.可以说我有以下宏:

def generateField[T]: AnyRef =
  macro generateFieldImpl[T]

def generateFieldImpl[T: c.AbsTypeTag](c: Context): c.Expr[AnyRef] = {
/**
 * here I'm looking at the type T by reflection to see now many members it has
 * and based on that I'm generating TupleN[Array[Byte],...](null,...)
 * where N is number of members in class represented by type T
 */
}

我打算只使用案例类作为T.

当我将这个宏与case类一起使用时,它工作得很好,但现在我想添加一个抽象级别:

trait WithGeneratedField[T] {
  val _myField = generateField[T]
}

我遇到的问题是当声明特性时宏会被扩展,在那时T被称为抽象类型’T’.有没有办法推迟宏观扩张,直到我把这个特性与具体的东西混合在一起?例如:

case class MyClass(a: String,b: Int) extends WithGeneratedField[MyClass]

最后,我的目标是使用宏将生成的字段添加到案例类.也许还有更好的方法吗?

解决方法

如果这在2.10.0中成为可能,我会感到惊讶.

使用宏类型或宏注释(http://scalamacros.org/future.html),它应该非常简单.我们一发布2.10.0-final就会开始研究这些新的宏,但是很难预测ETA.也许2012年冬天 – 2013年春天.

(编辑:李大同)

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

    推荐文章
      热点阅读