Действительно, это затенение параметров.
let foo bar =
let bar = bar * bar
bar
Это абсолютно нормально в F #. Параметр функции затеняется привязкой. Ничего не меняется - это только делает оригинальную привязку недоступной.
Более глубокая проблема заключается в int
. Поскольку int
преобразует тип в Int32
, можно ожидать, что функция будет принимать все, что может быть преобразовано в int
; или числа или строки. Но -
let print_scene (y, v) =
let y, v = int y, int v
()
print_scene (1.0, "2.0")
print_scene (1.0, 2.0) //this won't compile
Параметры функции будут ограничены с первого использования. Здесь его тип становится следующим:
float * string -> unit
Это потому, что F # не имеет полиморфизм с более высоким родом . Возможно, вам лучше четко указать тип параметров, которые вы хотите принять, или включить их, если для вас важен универсальный c.
let inline print_scene (y, v) =
let y, v = int y, int v
()
print_scene (1.0, "2.0")
print_scene (1.0, 2.0) //this works