我有一個測試套件,它使用Slick進行數據庫訪問。該套件中的一些測試訪問數據庫,有些則不是。 我的套房擁有當作爲隱式方法參數值使用時,隱式值是否也可以是一個惰性值?
implicit val db = DB.getDB
在套件開始執行,有效地初始化DataBaseDef
。然後將此值用作某些方法的隱式參數值。 此外,它具有關閉db
在套件執行結束的afterAll()
:如果我改
override def afterAll():Unit={
db.close()
super.afterAll()
}
現在: implicit lazy val db = DB.getDB
那麼究竟會怎樣呢?
如果我只運行一個不使用數據庫的測試,那麼連接將不會被初始化,並且在afterAll()
它仍然會嘗試關閉連接,在這種情況下我遇到了問題,對不對?我試着跑,但沒有發生錯誤,也沒有發生任何異常......
我對implicits的瞭解還不足以幫助我理解它與懶惰的結合。
你是對的。發佈這個問題後,我想到了更多,而這一點對我來說變得很清楚 我仍然想澄清'lazy'修飾符對方法調用中隱式參數值發現的影響。你能幫忙嗎? –
或者我可以放心地採用標準規則:如果在規範中沒有關於這方面的信息,懶惰在這方面沒有任何影響? –
@AlexanderArendar如果你有一個被調用的方法需要的'implicit lazy val',它會實現這個值。在你的情況下,它會創建數據庫連接。 –