scala - 包对象什么时候初始化?

标签 scala package

如果我定义一个包对象

package com.something.else

package object more {
    val time = System.currentTimeMillis
    // ... other stuff ...
}

然后将其导入源代码中的某个位置。

import com.something.else.more

这个对象(及其成员)何时初始化/构造?

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

最佳答案

很容易检查:

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)
}

给出:

1339394348495
1339394349496

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

关于scala - 包对象什么时候初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973692/

相关文章:

scala - Scala:构造函数采用Seq或varargs

list - Scala:创建相同类型的新列表

java - 重命名一个项目应该这么难吗?

command-line - 从命令行构建 .car ColdFusion 存档

scala - 关闭 Slick 注销

scala - 我在哪里对 ResultSet 进行了多次迭代?或者为什么它被关闭?

java - Eclipse无法自动构建

在函数 R 中需要包

java - 使用 Navigation 包中的 startActivity

python - 无法在 conda meta.yaml 文件中指定 pip 依赖项