なんかこのシリーズ、増えれば増えるほど自分の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
こんな感じ。これ以上言えることがあまりないです。