Suz*_*ioc 4 oop polymorphism ocaml strong-typing
由于OCaml具有不同的整数和双精度乘法运算,它如何面向对象?这是不是意味着OCaml没有多态性?
sep*_*p2k 10
是的,OCaml具有多态性.以下是算术运算未实现为多态方法的一些原因:
f (x, y) = x + y推断类型的函数int * int -> int.如果您更改语言以生成运算符方法和ints对象,则推断类型将是< + : 'a -> 'b; .. > * 'a -> 'b.对于这种简单的功能具有这种复杂的类型可能是不希望的.还要注意,在许多支持运算符重载的主流语言中,运算符往往被实现为非虚拟(因而非多态)方法或函数.大概是因为我上面提到的表现原因.拥有多态运算符是相当罕见的.
PS:在函数式语言的上下文中,术语"多态性"最常用于表示"参数多态"(OO语言有时称为"泛型"),而在OO语言中,它最常用于表示"子类型多态性" ".这个答案假定你使用了单词的后一个含义,因为你明确提到了面向对象,因为前一个含义在这个上下文中并没有真正意义.