2016-02-29 1 views
4

Без спецификации типа, определение функции F #, кажется, получает только тип int. Я не хочу, чтобы использовать общие программирования, просто хочу, чтобы объявить функцию приема 2 плавающих типов, добавьте их вместе:F #: как определить функцию для добавления 2 поплавков? Укажите «Float» в сигнатуре функции?

> let g a b=a+b;; 

val g : a:int -> b:int -> int 

Как изменить мое заявление? Благодарю.

+2

проводки в качестве комментария, как это почти конечно, обман. Должно быть 'let gab: float = a + b' –

+2

Возможный обман здесь - https://stackoverflow.com/questions/10192390/make-function-work-with-all-numeric-types-int-float-long, второй ответ правильный для этого вопроса –

ответ

6

Вы можете добавить аннотацию типа к аргументу или аргументу для изменения выводимого типа на float.

let f1 x y : float = x + y 
let f2 (x: float) y = x + y 

val f1 : x:float -> y:float -> float 
val f2 : x:float -> y:float -> float 

Или вы можете использовать inline function

let inline f x y = x + y 

val inline f : 
    x: ^a -> y: ^b -> ^c 
    when (^a or ^b) : (static member (+) : ^a * ^b -> ^c) 

Как вы можете видеть, встраиваемая функция будет работать с любым типом, который имеет + оператор

f 1 2 
f 1.4 1.2 
f "foo" "bar" 
Смежные вопросы