OCaml 还支持丰富的面向对象系统
class counter = object
val mutable r = 0
method value =
r
method incr =
r <- r + 1;
r
method reset =
r <- 0;
0
end
我们可以像这样使用我们的counter
let () =
let c = new counter in
printf "counter value: %d\n" c#value; (* counter value: 0 *)
printf "counter value: %d\n" c#incr; (* counter value: 1 *)
printf "counter value: %d\n" c#incr; (* counter value: 2 *)
printf "counter value: %d\n" c#incr; (* counter value: 3 *)
printf "counter value: %d\n" c#value; (* counter value: 3 *)
printf "counter value: %d\n" c#value; (* counter value: 3 *)
printf "counter value: %d\n" c#reset; (* counter value: 0 *)
printf "counter value: %d\n" c#incr; (* counter value: 1 *)
类实例封装了它们的数据成员,因此我们可以轻松管理多个计数器
let () =
let a = new counter in
let b = new counter in
printf "A: %d, B: %d\n" a#value b#value; (* A: 0, B: 0 *)
printf "A: %d, B: %d\n" a#incr b#value; (* A: 1, B: 0 *)
printf "A: %d, B: %d\n" a#incr b#value; (* A: 2, B: 0 *)
printf "A: %d, B: %d\n" a#incr b#value; (* A: 3, B: 0 *)
printf "A: %d, B: %d\n" a#value b#incr; (* A: 3, B: 1 *)
printf "A: %d, B: %d\n" a#value b#incr; (* A: 3, B: 2 *)
printf "A: %d, B: %d\n" a#value b#incr; (* A: 3, B: 3 *)
printf "A: %d, B: %d\n" a#reset b#reset; (* A: 0, B: 0 *)