読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Object

ScalaのObjectについて。The Scala LanguageSpecificationを読んでポイントをまとめます。

使いみち

定数(static変数)やstaticメソッドを作るのに使う。逆にscalaにはstaticがない。

内部的にはどうなってるの?

次のような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書く人は注意。