2015-08-14 100 views
1

我使用宏註釋來檢查類的字段並基於這些字段添加成員。嵌套列表的編譯時反射:typecheck List [List [Int]]返回List [List [...]]?

例如

@AddVal 
class A(x: Int) 

擴展到

class A(x: Int){ 
    val get: Int = x 
} 

提取ValDef後,它tpe領域仍然null所以要獲得類型我有兩個選擇:

1)如果我打電話的ToString的類型樹,我可以看到類型,但現在我已經失去了一些類型安全

2)如果我在類型樹上使用c.typecheck,我可以得到的類型,但只有它是1級深。列表[列表[INT]]回來爲一覽[名單[...]]

 val fieldType = c.typecheck(q"type T = ${f.tpt}") match { 
      case x @ TypeDef(mods, name, tparams, rhs) => rhs.tpe 
     } 

那麼,有沒有一種方法來遞歸類型檢查,多型?

我試過typechecking rhs再次,但我得到The argument types of an anonymous function must be fully known,我不知道如何解決這個問題。

感謝您抽空看看,

朱利安

回答

0

我錯誤地歸咎於這個錯誤給宏的時候,其實有這是失敗的另一個底層宏(一種供應商宏)提供正確的嵌套類型(在這種情況下爲Int)。

相關問題