Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用运行时参数在Scala中创建单例对象_Scala - Fatal编程技术网

如何使用运行时参数在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