パッケージ オブジェクトは、 package.class IIRCと呼ばれる通常の Java クラス ファイルに変換されます。それ以降は、通常の Java クラスと同様に動作すると想定しているため、最初に参照されたときにロードされてインスタンス化されます。val
Scala では、何らかのメソッドまたはパッケージ オブジェクトを定義して、外部からアクセスする必要があることを意味します。あなたの場合、のコンストラクターからClassy
、またはインスタンス化するコードから呼び出すことができますClassy
。
アップデート
OK、これは私が上で説明したことをテストするために実行したいくつかのコードです:
// package.scala
package some
package object pkg {
println("package created!")
def func() { println("func called") }
}
// C.scala
package some.pkg
class C {
println("created C")
}
// G.scala
package some.pkg
object G {
println("creating G")
func()
println("created G")
}
// PackageTester.scala
package some.pkg
object PackageTester extends App {
val c = new C
val g = G
}
出力は次のとおりです。
created C
creating G
package created!
func called
created G
これは、Scala パッケージ オブジェクトが実際に参照された場合にのみ遅延して作成されることを証明しています。実際、上記で示したように、「通常の」Scala オブジェクトについても同じことが言えますG
。