3.4 初期化

クラス定義内の let-束縛はオブジェクトが生成される前に評価されます。しかし、式をオブジェクトが生成された直後に評価することも可能です。そのような式は、初期化子と呼ばれる匿名の隠されたメソッドとして表現されます。このため、自分自身とインスタンス変数を参照することができます。

#class printable_point x_init =
   let origin = (x_init / 10) * 10 in
   object (self)
     val mutable x = origin
     method get_x = x
     method move d = x <- x + d
     method print = print_int self get_x
     initializer print_string "new point at "; self print; print_newline()
   end;;
class printable_point :
  int ->
  object
    val mutable x : int
    method get_x : int
    method move : int -> unit
    method print : unit
  end

#let p = new printable_point 17;;
new point at 10
val p : printable_point = <obj>
    

初期化子は継承の際に上書きされず、すべて評価されます。初期化子もオブジェクトがある一定の性質をみたすようにするのに便利です。他の例が 5.1 節に挙げられています。