如何使用运行时参数在Scala中创建单例对象
我试图创建一个带有运行时指定参数的单例对象。 例如:如何使用运行时参数在Scala中创建单例对象,scala,Scala,我试图创建一个带有运行时指定参数的单例对象。 例如: 假设networkaddress参数来自命令行。我如何才能找到解决方法来实现这一点?使用lazy: object Program { var networkAdress: String = _ def main(args: Array[String]): Unit = { networkAdress = args(0) println(NetworkPusher.networkAdress) } obje
假设networkaddress参数来自命令行。我如何才能找到解决方法来实现这一点?使用
lazy
:
object Program {
var networkAdress: String = _
def main(args: Array[String]): Unit = {
networkAdress = args(0)
println(NetworkPusher.networkAdress)
}
object NetworkPusher {
lazy val networkAdress = Program.networkAdress
}
}
单例是惰性初始化的
scala> :pa
// Entering paste mode (ctrl-D to finish)
object Net {
val address = Config.address
}
object Config { var address = 0L }
// Exiting paste mode, now interpreting.
defined object Net
defined object Config
scala> Config.address = "1234".toLong
Config.address: Long = 1234
scala> Net.address
res0: Long = 1234
FWIW.好吧,你不能这么做。对象定义需要在编译时完全指定。但是,如果您只想从命令行args设置网络地址的值,可以使用args数组并在NetworkPusher构造函数中传入网络地址的值。我从来不知道
:pa
粘贴模式!好提示!这里不需要惰性,对象是惰性初始化的
scala> :pa
// Entering paste mode (ctrl-D to finish)
object Net {
val address = Config.address
}
object Config { var address = 0L }
// Exiting paste mode, now interpreting.
defined object Net
defined object Config
scala> Config.address = "1234".toLong
Config.address: Long = 1234
scala> Net.address
res0: Long = 1234