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