我对 OCaml 很陌生。你能给我一个新手能理解的OCaml中最简单的多态性例子吗?我了解 Java、C# 和 C++,并且对函数式语言也有一定的了解。
问问题
387 次
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 回答