0
根據我的理解,只有在創建新任務或使用:=
運算符進行設置時,才能訪問streams.value.log
。用於登錄Scala的設計模式SBT Autoplugin
我找對streams.value.log
背景下的良好格局或許一些增強的知識,使我能避免以下幾點:
傳遞stream.value.log到每一個函數鏈,如。 GetBucket(...,logger:sbt.Logger)=> ParseBucketName(...,logger:sbt.Logger)=> GetBucketName(...,logger:sbt.Logger)=>等..
這樣做有一個全局可變像這樣
trait AWSPluginUtils { //mutable logger: don't have to pass sbt.logger through every function private var _logger: Any = None def setLogger(sbtLogger: Logger): Unit = { _logger = sbtLogger } def getLogger(): Logger = { _getLogger } lazy val _getLogger: Logger = _logger match { case l: sbt.Logger => l } def infoLog(message: String): Unit = { getLogger().info(message) } def debugLog(message: String): Unit = { getLogger().info(message) } def errLog(message: String): Nothing = { getLogger().error(message) throw new RuntimeException(message) } }
你爲什麼要避免1?這是IMO的正確答案。如果你想減少樣板,你可以使用'logger'和你的函數的隱含參數。 – sjrd