Я только что узнал, что OCAML должен иметь постфикс .
для выполнения арифметики float. Примером может быть 3. +. 4.
, равным 7.
(float). Тем не менее, F # обрабатывает арифметику float и integer одинаково, поэтому работают как 3 + 4
(int), так и 3. + 4.
(float).
F # имеют +
, естественно присваиваемые int, поэтому let add a b = a + b
имеет тип int -> int -> int
. И действительно (+)
дает мне val it : (int -> int -> int) = <fun:[email protected]>
.
Это приводит к следующей последовательности, которая, по моему мнению, довольно counter- интуитивно понятна:
> 3. + 4.;;
val it : float = 7.0
> (+);;
val it : (int -> int -> int) = <fun:[email protected]>
Итак, мой вопрос: является ли "перегрузка" выполняемым специальным механизмом/случаем в компиляторе, или это просто language-, поэтому я потенциально могу определить функцию с именем add
(или что-то еще), которые имеют одно определение для целых чисел и одно для float (или любого другого типа.)