如何在准报价中使用cq来返回匹配的模式

时间:2015-08-21 09:37:31

标签: scala-macros scala-quasiquotes

我正在尝试编写此case authorDao: AuthorDao => authorDao,以便它返回Dao本身的子类。

当我使用这个准引用时:

val daoType = TypeName(daoName)
val caseTerm = TermName(daoName.toLowerCase)

cases.append(cq"$caseTerm: $daoType=> $caseTerm")

它会生成此

case (authordao @ ((_): AuthorDao)) => authordao

如果我这样做

cases.append(cq"${q"$caseTerm: $daoType"} => $caseTerm")

这样做

case ((authordao): AuthorDao) => authordao

两者都产生编译错误

1 个答案:

答案 0 :(得分:1)

经过一些谷歌搜索,我在这里找到答案:

Scala multiple type pattern matching

基本上

case authordao: AuthorDao => authordao相当于此

<强> case authordao @ AuthorDao(_) => authordao

所以最后的代码就是这个

      val daoTerm = TermName(daoName)
      val caseType = TypeName(daoName.toLowerCase())
      val caseExpr = TermName(daoName.toLowerCase)

      cases.append(cq"$caseType @ $daoTerm(_) => $caseExpr")