(* 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