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



我试图写这个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

都产生编译错误

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

Scala多类型模式匹配

基本上

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")

相关内容

  • 没有找到相关文章

最新更新