如何在 return 匹配模式的准引用中使用 cq
How to use cq in quasi quote to return the matched pattern
我正在尝试编写这个 case authorDao: AuthorDao => authorDao
以便它 returns 成为 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 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")
我正在尝试编写这个 case authorDao: AuthorDao => authorDao
以便它 returns 成为 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 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")