gpt4 book ai didi

scala - 我可以在 Scala 中定义 “method-private” 字段吗?

转载 作者:行者123 更新时间:2023-12-04 22:16:22 28 4
gpt4 key购买 nike

鉴于这种情况:

object ResourceManager {

private var inited = false

def init(config: Config) {
if (inited)
throw new IllegalStateException
// do initialization
inited = true
}

}

有什么办法可以让 inited以某种方式“私有(private)于 init()”,因此我可以确定该类中没有其他方法能够设置 inited = false ?

最佳答案

取自 In Scala, how would you declare static data inside a function? .不要使用方法而是函数对象:

val init = { // or lazy val
var inited = false

(config: Config) => {
if (inited)
throw new IllegalStateException

inited = true
}
}

在外部范围的初始化(在 val 的情况下)或第一次访问( lazy val )期间,变量的主体被执行。因此, inited设置为 false .最后一个表达式是一个匿名函数,然后分配给 init .每次访问 init然后将执行这个匿名函数。

请注意,它的行为与方法不同。 IE。在没有参数的情况下调用它是完全有效的。然后它的行为就像一个带有下划线 method _ 的方法。 ,这意味着它只会返回匿名函数而不会提示。

如果出于某种原因,您实际上需要方法行为,则可以将其设为 private val _init = ...并从公众处调用 def init(config: Config) = _init(config) .

关于scala - 我可以在 Scala 中定义 “method-private” 字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4400926/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com