2015-08-14 98 views
1

我使用宏注释来检查类的字段并基于这些字段添加成员。嵌套列表的编译时反射:typecheck List [List [Int]]返回List [List [...]]?

例如

@AddVal 
class A(x: Int) 

扩展到

class A(x: Int){ 
    val get: Int = x 
} 

提取ValDef后,它tpe领域仍然null所以要获得类型我有两个选择:

1)如果我打电话的ToString的类型树,我可以看到类型,但现在我已经失去了一些类型安全

2)如果我在类型树上使用c.typecheck,我可以得到的类型,但只有它是1级深。列表[列表[INT]]回来为一览[名单[...]]

 val fieldType = c.typecheck(q"type T = ${f.tpt}") match { 
      case x @ TypeDef(mods, name, tparams, rhs) => rhs.tpe 
     } 

那么,有没有一种方法来递归类型检查,多型?

我试过typechecking rhs再次,但我得到The argument types of an anonymous function must be fully known,我不知道如何解决这个问题。

感谢您抽空看看,

朱利安

回答

0

我错误地归咎于这个错误给宏的时候,其实有这是失败的另一个底层宏(一种供应商宏)提供正确的嵌套类型(在这种情况下为Int)。

相关问题