0

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

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

考虑多态类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是如何被实例化的?

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

4

0 回答 0