我知道对象在scala中非常像单例。但是,我一直无法找到一种优雅的方法来指定初始实例化的默认行为。我可以通过将代码放入对象声明的主体中来完成此操作,但这似乎太过分了。使用应用程序并不能真正起作用,因为可以多次调用该应用程序,并且对于此用例而言实际上没有任何意义。

有关如何执行此操作的任何想法?

最佳答案

类和对象在设计时都会在实例化时在其体内运行代码。为什么这是“hacky”?这是该语言应如何工作的方式。如果您喜欢额外的花括号,则可以随时使用它们(它们将防止局部变量被保留并在世界范围内查看)。

object Initialized {
  // Initalization block
  {
    val someStrings = List("A","Be","Sea")
    someStrings.filter(_.contains('e')).foreach(s => println("Contains e: " + s))
  }

  def doSomething { println("I was initialized before you saw this.") }
}

scala> Initialized.doSomething
Contains e: Be
Contains e: Sea
I was initialized before you saw this.

scala> Initialized.someStrings
<console>:9: error: value someStrings is not a member of object Initialized
       Initialized.someStrings

10-04 15:06