Object
ScalaのObjectについて。The Scala LanguageSpecificationを読んでポイントをまとめます。
内部的にはどうなってるの?
次のようなobjectの定義は、
object X extends T
内部的には↓のようになっているとのこと。
final class X$cls extends T private var X$instance = null final def X = { if (X$instance == null) X$instance = new X$cls X$instance }
- finalな専用クラスが1コできる。
- インスタンスは必要になったときに作成される。
ふむ。
名前空間がクラスと違う
クラスの名前空間とオブジェクトの名前空間は別であるため、同名のクラスとオブジェクトは共存できる。
class Foo { def a = "class" } // クラスと同名のオブジェクト。 // 名前空間が違うので共存できる。 object Foo { def a = "object" } println( Foo.a ) // object println( (new Foo).a ) // class
JavaScript書く人は注意。