Я только что узнал, что 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 (или любого другого типа.)