2
假設我有兩個宏觀註解類,後擴張期間他們的字段定義,一個依賴於其它:如何指定多個類的宏註解擴展的順序?
@Annotation case class A(i: Int) @Annotation case class B(a: A)
我需要A
B
之前張開,但順序他們的定義並不能確保。
例如,在一個不相關的編譯單元到B
的引用作爲一個類型參數的一個對象,如:
在一個文件中,而在另一個class Y{Z[B]}
class X{val b = B(A(1))}
,
導致B
被擴展首先,因此我的彙編失敗。
什麼決定了這種情況下宏擴展的順序?有沒有辦法強制執行所需的命令?
感謝您的輸入,
朱利安
你能解釋一下你的用例? 'Annotation'宏是做什麼的?也許有一些你可以分享的代碼? –
感謝您的回覆,並對我的延誤表示歉意。該代碼使案例類Avro-serializable成爲可能,部分原因是將其轉換爲Schema對象並將其存儲以防再次需要。如果某個字段的類型是另一個案例類別,則該其他案例類別需要已經存儲。 –
[此分支](https://github.com/julianpeeters/avro-scala-macro-annotations/tree/expansion_order)是一個最小化的示例,顯示擴展的順序不僅取決於給定文件中的第一個引用,還取決於引用它的文件名的詞彙順序。也就是說,將'A.scala'重命名爲'Z.scala',以便它遵循'Test.scala'的詞法,編譯將會成功。 –