0

我对 OCaml 很陌生。你能给我一个新手能理解的OCaml中最简单的多态性例子吗?我了解 Java、C# 和 C++,并且对函数式语言也有一定的了解。

4

3 回答 3

5

身份是多态的:

let id x = x
于 2013-01-20T19:35:46.483 回答
3

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

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

此函数计算任何列表的长度。换句话说,列表中事物的类型是完全多态的。这种多态性被称为参数化,以将其与更多 OO 类型的“ad hoc”多态性(如在 Java 中)区分开来,后者通过针对不同情况给出不同的实现来实现多态性。使用参数多态性,只有一种实现适用于多种类型。当然,OCaml 也有 OO 风格的多态性。Java 有一种参数多态性,称为“泛型”。

于 2013-01-20T19:29:40.493 回答
1

这是 Jeffrey 谈论的即席多态的经典 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
于 2013-01-20T19:35:28.880 回答