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