是否可以确定Scala宏中模式变量的类型?

时间:2013-08-28 09:57:01

标签: scala macros scala-2.10 scala-macros

作为宏的一部分,我需要检查案例定义的模式。

有没有办法确定模式变量的类型,甚至是整个模式?

考虑多态类Data,以及使用变换器检查和转换Data值上的模式的宏:

case class Data[A](x: String, data: A)

def macroImpl(c: Context)(...) = {

  val transformer = new Transformer {
    override def transformCaseDefs(trees: List[CaseDef]) = trees map {
      case CaseDef(pattern, guard , body) => pattern match {
        case pq"Data($string, $data)" => {
          // What is the type of $data, i.e., how
          // is the type parameter A instantiated?
          ...
        }
      }
    }
  }
  ... 
  transformer.transform(...)
}

有没有办法确定模式变量$ data的类型,即确定如何实例化类型参数A的方法?

另一个question讨论了值树的这个问题,并建议使用c.typeCheck函数。遗憾的是,这似乎不适用于模式,因为typeCheck方法在应用于上述示例的模式树时会抛出TypeCheckException

0 个答案:

没有答案