What is it, naokirin?

私の貧弱なOCaml力を晒す 第六回 「関数型だけど、オブジェクトなんだもん」

なんかこのシリーズ、増えれば増えるほど自分のOCamlへの知識のなさが見えてくる…


今回はFunctional Objects.

「あー、それね。はいはいChapter 3あたりに書いてあるのでしょ」と思った人は正解です。いやはや、私は今"O"縛り中なので、クラスとかオブジェクトとかよくわかんなくって…(嘘
でもクラスってそんなに書きまくることがないので、正直ほとんど書いてません。知りません。忘れてます。


Functional objectsとは {< ... >} と書くことで自分自身のオブジェクトのコピーを作ることができるものを表します。ただし、インスタンス変数に関しては {< ... >} 内で変更することができます。

# class foo = object
    val x = 1
    method get_x = x
    method bar d = {< x=x+d >}
  end
;;
class foo :
  object ('a) val x : int method bar : int -> 'a method get_x : int end
# let f = new foo
;;
val f : foo = <obj>
# f#get_x
;;
- : int = 1
# (f#bar 1)#get_x
;;
- : int = 2
# f#get_x
;;
- : int = 1

こんな感じ。これ以上言えることがあまりないです。