Тип добавления (+) в F #

Я только что узнал, что 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 (или что-то еще), которая есть одно определение для целых чисел и одно для чисел с плавающей запятой (или любого другого типа).

13
задан Guy Coder 12 April 2016 в 10:24
поделиться