0
在保持用Scala編寫2.10.x老Scala代碼重寫後,意想不到的事情發生在我身上時,我試着輸入macros
檢查TypeTree
。看看下面的代碼,Typetree類型檢查
annottees.map(_.tree).toList match {
case q"$mods def $name[..$tpes](...$args) : $returnType = { ..$body }" :: Nil =>
val isUnit = c.typeCheck(q"type T = $returnType;()").children.head match {
case TypeDef(_, _, _, tpt) => tpt.tpe =:= typeOf[Unit]
}
//... business logic
正如你所看到的,我想要做的是簡單的 - 試圖以決定是否註解的方法的返回類型爲Unit
。它服務的宗旨,但我注意到,有時AST的returnType
得到改寫
當
。例如,returnType
確實
Unit
原來AST爲returnType
是,
isUnit
Select(Ident(scala), newTypeName("Unit"))
後,
Select(Ident(scala), scala.Unit)
其結果是,對於一些返回Unit
方法
的宏展開的失敗編譯。
這是一個錯誤或東西,我應該期待什麼?有沒有辦法避開它?