我必須將一些宏集成到使用蛋糕模式的項目中。這種模式使我們能夠避免大量的進口以及其他優勢,所以我們希望保留它。現在,我們遇到了一些我們在主幹外測試的實驗宏的問題。首先,讓我們展現一個虛擬的命名蛋糕系統:是否可以集成Cake-Pattern和Macros?
trait APiece {
class A
}
trait BPiece { this: APiece =>
def aMacro(a: A): Unit =() /* macro ??? */
}
trait CPiece { this: APiece with BPiece =>
def aMacroInvoker = aMacro(new A)
}
class Cake { this: APiece with BPiece with CPiece => }
每人定義一個類,BPiece應該是它採用的每人定義的類的宏,最後,CPiece調用宏。我說過,BPiece應該是一個宏,因爲我無法爲它編寫實現代碼。我嘗試了好幾種方法,但我總是與以下錯誤崩潰:
"macro implementation must be in statically accessible object"
讀macros code一個可以猜測,這是neccesary附上宏觀靜態模塊中。有沒有辦法部署一個使用系統結構的宏?
我不認爲這解決了他的問題,我不認爲會有什麼。蛋糕模式的本質 - 就像你應該知道的那樣! :-) - 能夠在「客戶端」代碼中選擇你想要的圖層。如果'宏'是靜態的,則不能隨意切換。你可以切換源文件或類文件,但是你不能編寫代碼說「這將使用來自這裏的宏,並且將使用來自那裏的宏」。 –
太好了,我認爲會出現新的問題,但我現在可以繼續使用此解決方案。非常感謝你!Daniel,我們的系統不會像宏一樣純粹(蛋糕模式)。我們只允許客戶決定他是否要使用它們。所以,我希望這樣做夠好。 – jeslg
@ DanielC.Sobral雖然我的想法是在一個蛋糕裏面聲明一個宏。如果您有不同的圖層來定義指向不同宏實現的宏,您可以根據需要在它們之間切換並獲得不同的行爲。 –