OCaml中最简单的多态性示例?

时间:2013-01-20 19:11:48

标签: polymorphism ocaml sample

我对OCaml很新。你能否告诉我OCaml中最简单的多态性示例,新手可以理解?我了解Java,C#和C ++,对函数式语言也有一定的了解。

3 个答案:

答案 0 :(得分:5)

身份是多态的:

let id x = x

答案 1 :(得分:3)

这是OCaml中多态函数的一个非常简单的例子:

let rec length = function
| [] -> 0
| _ :: tail -> 1 + length tail

此函数计算任何列表的长度。换句话说,它在列表中的事物类型中是完全多态的。这种多态性称为参数,以区别于更多OO类型的“ad hoc”多态(如在Java中),其中通过为不同情况提供不同的实现来实现多态性。使用参数多态性,只有一种实现可以跨多种类型。当然,OCaml也具有OO风格的多态性。 Java有一种称为“泛型”的参数多态。

答案 2 :(得分:1)

以下是Jeffrey在您感兴趣的时候讨论的adhoc多态性的经典OO“坏例子”:

class virtual animal = object
  method virtual say : unit
end

class dog = object
  inherit animal
  method say = print_endline "bark"
end

class cat = object
  inherit animal
  method say = print_endline "meow"
end

let my_animals = [new dog; new cat]

let () = List.iter (fun x -> x#say) my_animals