为什么类型的星号超载?

Suz*_*ioc -1 ocaml operator-overloading cartesian-product

我仍然不明白动机.

为什么他们分别为整数和浮点数乘法制作了两个不同的运算符(**.),就好像它们害怕超载一样,但同时它们曾经*用来表示类型的笛卡尔积?

type a = int * int ;;
Run Code Online (Sandbox Code Playgroud)

为什么他们突然变得如此勇敢?为什么不写

type a = int *.. int ;;
Run Code Online (Sandbox Code Playgroud)

或者其他的东西?

是否存在一些关系,这使得笛卡尔积更接近整数乘积并且更远离浮动乘积?

Dan*_*zli 9

它没有超载,在你的右侧type t =定义了另一种概念,你定义的是一种类型,而不是一种价值.

在类似ML的语言中,您可以看到两种不同的语言:

  1. 允许您定义类型的类型语言(值的结构规范).
  2. 允许您定义值的值的语言(对应于类型的实际值,函数也是值).这就是得到评估的东西.

由于两种语言的领域是真正分开的,因此在重复使用每种语言中的类似句法结构时没有理论上的问题/模糊性,因此与重载完全无关.