gpt4 book ai didi

oop - OCaml 是否具有多态性?

转载 作者:行者123 更新时间:2023-12-04 05:48:00 25 4
gpt4 key购买 nike

既然 OCaml 有不同的整数和 double 乘法运算,那么它如何面向对象呢?这不是意味着 OCaml 没有多态性吗?

最佳答案

是的,OCaml 具有多态性。以下是算术运算未实现为多态方法的一些原因:

  • 整数和 double 数不是 OCaml 中的对象,因此它们不能有方法。
  • OCaml 中的运算符是函数,而不是方法。当然,该语言可以被设计为使它们成为方法,但是您不能为不是对象的任何东西定义自定义运算符。
  • 如果你写了一个像 f (x, y) = x + y 这样的函数推断的类型是 int * int -> int .如果您更改语言以生成操作符方法和整数对象,则推断类型将为 < + : 'a -> 'b; .. > * 'a -> 'b .为这样一个简单的函数使用如此复杂的类型可能是不可取的。
  • 每次使用算术运算时都要支付多态调度的成本对性能不利。

  • 还要注意,在许多支持运算符重载的主流语言中,运算符也往往被实现为非虚拟(因此是非多态)方法或函数。大概是出于我上面提到的性能原因。拥有多态运算符是相当罕见的。

    PS:在函数式语言的上下文中,术语“多态性”最常用于指代“参数多态性”(OO 语言有时称为“泛型”),而在 OO 语言中,它最常用于指代“子类型多态性” ”。这个答案假设您使用了该词的后一种含义,因为您明确提到了面向对象,并且前一种含义在这种情况下并没有真正意义。

    关于oop - OCaml 是否具有多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424602/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com