Когда создаются одноэлементные объекты? - PullRequest
2 голосов
/ 28 апреля 2010

В конструкции

object O {
  // construction code and member initialization
}

, когда этот код будет запущен?

Ответы [ 2 ]

12 голосов
/ 28 апреля 2010

Код будет вызываться при первом обращении к O (какой-либо метод или какое-либо свойство). Например, следующая программа

object O {
  println("Hello from O")
  def doSome() {}
}

object App extends Application {
  println("Before O")
  O.doSome()
  println("After O")
}

даст

Before O
Hello From O
After O

Недостаточно просто определить O. Также не сработает вызов Class.forName("O"), поскольку имя скомпилированного объекта O$, поэтому вызов Class.forName("O$") подойдет.

4 голосов
/ 28 апреля 2010

В интересах построения самостоятельности:

scala> object O { println("hi") }
defined module O

scala> O
hi
res0: O.type = O$@51d92803

scala> O
res1: O.type = O$@51d92803
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...