我正在尝试编写此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
两者都产生编译错误
答案 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")