如果設定了實體變數,我想使用它。如果未設定,則執行設定作業。
所以這就是我想要的并且它有效:
class Devices(){
private var _devices = List[Any]()
def devices(): List[Any] = {
// possibly other stuff
_get_devices() // return processed list of devices
}
private[this] def _get_devices(): List[Any] = {
if (_devices.isEmpty) {
_devices = _initialize_list_of_devices()
}
_devices
}
private[this] def _initialize_list_of_devices(): List[Any] = {
List[String]("_initialized") // perform time-consuming processing
}
}
但我想知道是否有更慣用的 Scala 方式來做這件事。
我也無法使用,lazy val因為我稍后需要修改變數。
在 Ruby 中,它類似于延遲加載、記憶,或者這樣:
def my_attribute
@my_attribute ||= initialize_my_attribute
end
或者
def my_attribute
@my_attribute = (value || initialize_my_attribute)
end
謝謝你的時間??
uj5u.com熱心網友回復:
您可以使用lazy val將變數的初始化推遲到第一次訪問時:
class Devices(){
private lazy val _devices: List[Any] = {
List[String]("_initialized") // perform time-consuming processing
}
}
lazy val從多個執行緒訪問s是安全的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361521.html
