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