我有一些代碼具有必須在最終使用它的函數中構造一個對象的常量(出於與全局狀態相關的各種原因,這些原因並不理想但是是部分的假設)。Scala編譯時檢查構造函數調用的位置
例如假設下面的函數boo負責操作moo。希望使用布布的
def boo(mooGen:() => Moo) {
val m = mooGen() // a new MOO must be created HERE
m.moo()
}
客戶端必須通過在一個類型()=>武,其中函數產生期望武的。
理想的客戶端的行爲:
boo(() => new Moo(// specific parameters here))
も沒有,直到噓體內產生。
但是,客戶端可以很容易地用下面的代碼失誤:
val myMoo = new Moo(// specific parameters here)
boo(() => myMoo)
這打破了我們想要只發生在噓も結構不變。
所以基本上,我想確定mooGen的返回值是在函數的調用堆棧中創建的,還是事先創建的。
有很多方法可以在運行時驗證它。但是,有沒有辦法強制這個模式在編譯時間?使用implicits或其他聰明的東西?
任何想法感謝!