class person_a
(name
: string) (age
: int) = object
method serialize_to_string =
Printf.sprintf
"{ name = \"%s\
" ; age = %d }" name age
(* depends on format *)
end
let example_a () =
let p = new person_a "John Smith" 30 in
Printf.printf
"person_a : %s\n" p
#serialize_to_string
type value =
type property
= string * value
class person_b
(name
: string) (age
: int) = object
end
(* implements (property list -> string) interface / depends on it *)
let properties_string properties =
let value_string value = match value with
in
let property_string (name, value) = name ^ " = " ^ (value_string value) in
let concat_property str prop = str ^ " ; " ^ property_string prop in
match properties with
| [] -> "{}"
| p
::ps
-> "{ " ^ List.fold_left concat_property
(property_string p
) ps
^ " }"
(* implements (property list -> string) interface / depends on it *)
let json_object_string properties =
let value_string value = match value with
in
let property_string (name, value) = "\"" ^ name ^ "\": " ^ (value_string value) in
let concat_property str prop = str ^ ", " ^ property_string prop in
match properties with
| [] -> "{}"
| p
::ps
-> "{ " ^ List.fold_left concat_property
(property_string p
) ps
^ " }"
let example_b () =
let p = new person_b "John Smith" 30 in
Printf.printf
"person_b : %s\n" (p
#serialize_to properties_string
) ; Printf.printf
"person_b : %s\n" (p
#serialize_to json_object_string
)
let () =
example_a () ;
example_b ()
CmNsYXNzIHBlcnNvbl9hIChuYW1lIDogc3RyaW5nKSAoYWdlIDogaW50KSA9IG9iamVjdAoKICAgIG1ldGhvZCBzZXJpYWxpemVfdG9fc3RyaW5nID0KICAgICAgICBQcmludGYuc3ByaW50ZiAieyBuYW1lID0gXCIlc1wiIDsgYWdlID0gJWQgfSIgbmFtZSBhZ2UgKCogZGVwZW5kcyBvbiBmb3JtYXQgKikKCmVuZAoKbGV0IGV4YW1wbGVfYSAoKSA9CiAgICBsZXQgcCA9IG5ldyBwZXJzb25fYSAiSm9obiBTbWl0aCIgMzAgaW4KICAgIFByaW50Zi5wcmludGYgInBlcnNvbl9hIDogJXNcbiIgcCNzZXJpYWxpemVfdG9fc3RyaW5nCgoKCnR5cGUgdmFsdWUgPQogICAgfCBTdHJpbmcgb2Ygc3RyaW5nCiAgICB8IEludCBvZiBpbnQKCnR5cGUgcHJvcGVydHkgPSBzdHJpbmcgKiB2YWx1ZQoKY2xhc3MgcGVyc29uX2IgKG5hbWUgOiBzdHJpbmcpIChhZ2UgOiBpbnQpID0gb2JqZWN0CgogICAgbWV0aG9kIHNlcmlhbGl6ZV90byAoZm9ybWF0IDogcHJvcGVydHkgbGlzdCAtPiBzdHJpbmcpID0KICAgICAgICBmb3JtYXQgWyAoIm5hbWUiLCBTdHJpbmcgbmFtZSk7ICgiYWdlIiwgSW50IGFnZSkgXQoKZW5kCgoKKCogaW1wbGVtZW50cyAocHJvcGVydHkgbGlzdCAtPiBzdHJpbmcpIGludGVyZmFjZSAvIGRlcGVuZHMgb24gaXQgKikKbGV0IHByb3BlcnRpZXNfc3RyaW5nIHByb3BlcnRpZXMgPQogICAgbGV0IHZhbHVlX3N0cmluZyB2YWx1ZSA9IG1hdGNoIHZhbHVlIHdpdGgKICAgICAgICB8IFN0cmluZyBzIC0+ICJcIiIgXiBzIF4gIlwiIgogICAgICAgIHwgSW50IGkgICAgLT4gc3RyaW5nX29mX2ludCBpCiAgICBpbgogICAgbGV0IHByb3BlcnR5X3N0cmluZyAobmFtZSwgdmFsdWUpID0gbmFtZSBeICIgPSAiIF4gKHZhbHVlX3N0cmluZyB2YWx1ZSkgaW4KICAgIGxldCBjb25jYXRfcHJvcGVydHkgc3RyIHByb3AgPSBzdHIgXiAiIDsgIiBeIHByb3BlcnR5X3N0cmluZyBwcm9wIGluCiAgICBtYXRjaCBwcm9wZXJ0aWVzIHdpdGgKICAgIHwgW10gICAgLT4gInt9IgogICAgfCBwOjpwcyAtPiAieyAiIF4gTGlzdC5mb2xkX2xlZnQgY29uY2F0X3Byb3BlcnR5IChwcm9wZXJ0eV9zdHJpbmcgcCkgcHMgXiAiIH0iCgooKiBpbXBsZW1lbnRzIChwcm9wZXJ0eSBsaXN0IC0+IHN0cmluZykgaW50ZXJmYWNlIC8gZGVwZW5kcyBvbiBpdCAqKQpsZXQganNvbl9vYmplY3Rfc3RyaW5nIHByb3BlcnRpZXMgPQogICAgbGV0IHZhbHVlX3N0cmluZyB2YWx1ZSA9IG1hdGNoIHZhbHVlIHdpdGgKICAgICAgICB8IFN0cmluZyBzIC0+ICJcIiIgXiBzIF4gIlwiIgogICAgICAgIHwgSW50IGkgICAgLT4gc3RyaW5nX29mX2ludCBpCiAgICBpbgogICAgbGV0IHByb3BlcnR5X3N0cmluZyAobmFtZSwgdmFsdWUpID0gIlwiIiBeIG5hbWUgXiAiXCI6ICIgXiAodmFsdWVfc3RyaW5nIHZhbHVlKSBpbgogICAgbGV0IGNvbmNhdF9wcm9wZXJ0eSBzdHIgcHJvcCA9IHN0ciBeICIsICIgXiBwcm9wZXJ0eV9zdHJpbmcgcHJvcCBpbgogICAgbWF0Y2ggcHJvcGVydGllcyB3aXRoCiAgICB8IFtdICAgIC0+ICJ7fSIKICAgIHwgcDo6cHMgLT4gInsgIiBeIExpc3QuZm9sZF9sZWZ0IGNvbmNhdF9wcm9wZXJ0eSAocHJvcGVydHlfc3RyaW5nIHApIHBzIF4gIiB9IgoKbGV0IGV4YW1wbGVfYiAoKSA9CiAgICBsZXQgcCA9IG5ldyBwZXJzb25fYiAiSm9obiBTbWl0aCIgMzAgaW4KICAgIFByaW50Zi5wcmludGYgInBlcnNvbl9iIDogJXNcbiIgKHAjc2VyaWFsaXplX3RvIHByb3BlcnRpZXNfc3RyaW5nKSA7CiAgICBQcmludGYucHJpbnRmICJwZXJzb25fYiA6ICVzXG4iIChwI3NlcmlhbGl6ZV90byBqc29uX29iamVjdF9zdHJpbmcpCgpsZXQgKCkgPQogICAgZXhhbXBsZV9hICgpIDsKICAgIGV4YW1wbGVfYiAoKQo=