0

我正在尝试编写此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

两者都产生编译错误

4

1 回答 1

1

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

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")
于 2015-08-23T13:02:44.930 回答