Как уже ответил Брайан, оба эквивалентны. Возвращение fun
вместо объявления функции с использованием let
имеет значение, если вы хотите что-то сделать (т.е. выполнить некоторую инициализацию) перед возвратом функции.
Например, если вы хотите создать функцию, которая добавляет случайное число, вы можете написать:
let f1 x =
let rnd = new System.Random()
x + rnd.Next()
let f2 =
let rnd = new System.Random()
fun y -> y + rnd.Next()
Здесь функция f1
создает новый экземпляр Random
каждый раз, когда он выполняется, но f2
все время использует один и тот же экземпляр rnd
(поэтому f2
- лучший способ написать это). Но если вы немедленно вернете fun
, то компилятор F # оптимизирует код, и оба случая совпадают.