(* by poly. variant *)

type t = [ `Person of string | `Integer of int ]

let show = function

   `Person p -> p
 | `Integer i -> string_of_int i
 

let data = [ `Person "ogasawara";

	     `Integer 10 ]

let _ =

 List.iter (fun t -> print_string (show t)) data

let show' = function

   #t as t -> show t
 | `Float f -> string_of_float f

let data = [ `Person "ogasawara";

	     `Integer 10;
	     `Float 22.0 ]

let _ =

 List.iter (fun t -> print_string (show' t)) data

(* by object *)

class person name = object

 val name : string = name
 method show = name

end

class integer i = object

 val value : int = i
 method get = value
 method show = string_of_int i

end

class type showable = object

 method show : string 

end

let showable c = (c :> showable)

let data = [ showable (new person "ogasawara");

	     showable (new integer 10) ]

let _ =

 List.iter (fun o -> print_string o#show) data
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS