知ってる?オブジェクトってね...
レコードと高階関数で書けるんだ!TAPLに載ってるのを読んで、へー(×2)と思ったので紹介するね!*1
# type t = { mutable name : string; mutable age : int };; type t = { mutable name : string; mutable age : int; } # type m = { get_name : unit -> string; get_age : unit -> int; birthday : unit -> unit };; type m = { get_name : unit -> string; get_age : unit -> int; birthday : unit -> unit; } # let obj = let self = { name = "osiire"; age = 20; } in { get_name = (fun () -> self.name); get_age = (fun () -> self.age); birthday = (fun () -> self.age <- self.age + 1;) };; val obj : m = {get_name = <fun>; get_age = <fun>; birthday = <fun>} # obj.get_name ();; (* ここからがオブジェクトっぽい *) - : string = "osiire" # obj.birthday ();; - : unit = () # obj.get_age ();; - : int = 21
まさに「だから何?」というトリビアだね!じゃ!
*1:別に今日読んだ訳じゃないんだけど