匹配两个类型以确定类型参数



我正在用Scala编写一些宏。

让我们假设我有一些Type,例如typeOf[Map[String,Set[Int]]]和一个类似的类型,其中它的一些部分已被不确定的类型参数替换,例如typeOf[Map[String,Set[T]]],其中T未知。

如何将这两种类型相互匹配,才能发现TInt

typeArgs属性返回类型参数列表。如果我正确理解你需要什么:

val mapParams = typeOf[Map[String, Set[Int]]].typeArgs // List(String, Set[Int])
val setType = mapParams.drop(1).head                   // Set[Int]
val setParam = setType.typeArgs.head                   // Int

您可以尝试使用准引号文档:http://docs.scala-lang.org/overviews/quasiquotes/syntax-summary.html

import scala.reflect.runtime.universe._
tq"Map[Int,Int]" match {
  case tq"Map[Int,$t2]" => t2
}
tq"Map[Int,Seq[Int]]" match {
  case tq"Map[Int,Seq[$t2]]" => t2
}

相关内容

  • 没有找到相关文章

最新更新