Я только что узнал, что OCAML должен иметь .
postfix для выполнения арифметических операций с плавающей запятой. Например, 3. +. 4.
что равно 7.
(плавать). Однако F # обрабатывает арифметические операции с числами с плавающей запятой и целыми числами одинаково, поэтому и 3 + 4
(int), и 3. + 4.
(float) работает.
F # имеет +
, естественно присвоенное int, поэтому let add ab = a + b
имеет тип int -> int -> int
. И действительно, (+)
дает мне val it: (int -> int -> int) = (hidden) приводит к следующей последовательности, которую я считаю довольно противоречивой:
> 3. + 4.;;
val it : float = 7.0
> (+);;
val it : (int -> int -> int) = <fun:it@8-2>
Итак, мой вопрос: Выполняется ли «перегрузка» особым механизмом / случаем в компиляторе, или это общеязыковая вещь, поэтому я потенциально могу определить функцию с именем add
(или что-то еще), которая есть одно определение для целых чисел и одно для чисел с плавающей запятой (или любого другого типа).