包对象何时初始化?

Mal*_*rba 5 scala packages

如果我定义一个包对象

package com.something.else

package object more {
    val time = System.currentTimeMillis
    // ... other stuff ...
}
Run Code Online (Sandbox Code Playgroud)

然后在源代码中的某处导入.

import com.something.else.more
Run Code Online (Sandbox Code Playgroud)

该对象(及其成员)何时初始化/构建?

换句话说,什么决定了价值more.time
是否在程序首次启动时进行评估?或者第一次访问它?或者第一次more访问?

Lui*_*hys 7

这很容易检查:

package something

package object more {
  val time = System.currentTimeMillis
}

// in separate file:
package something.more

object Test extends App {
  val now = System.currentTimeMillis

  Thread.sleep(1000)

  println(now)
  println(time)
}
Run Code Online (Sandbox Code Playgroud)

得到:

1339394348495
1339394349496
Run Code Online (Sandbox Code Playgroud)

第二次是大约1000毫秒后,所以它是第一次访问包对象时,就像任何其他对象一样.