Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ключевое fun
слово используется для определения лямбда-выражения, то есть анонимной функции.
Синтаксис
fun parameter-list -> expression
Или с помощью краткой _.Property
нотации:
_.
fun
, список параметров и лямбда-стрелка (->
) опущены, и _.
является частью выражения , где _
заменяет символ параметра.
Следующие фрагменты кода эквивалентны:
(fun x -> x.Property)
_.Property
Замечания
Список параметров обычно состоит из имен и, при необходимости, типов параметров. Как правило, список параметров может состоять из любых шаблонов F#. Полный список возможных шаблонов см. в разделе "Сопоставление шаблонов". Списки допустимых параметров включают следующие примеры.
// Lambda expressions with parameter lists.
fun a b c -> ...
fun (a: int) b c -> ...
fun (a : int) (b : string) (c:float) -> ...
// A lambda expression with a tuple pattern.
fun (a, b) -> …
// A lambda expression with a cons pattern.
// (note that this will generate an incomplete pattern match warning)
fun (head :: tail) -> …
// A lambda expression with a list pattern.
// (note that this will generate an incomplete pattern match warning)
fun [_; rest] -> …
Выражение — это тело функции, последнее выражение которого создает возвращаемое значение. Ниже приведены примеры допустимых лямбда-выражений:
fun x -> x + 1
fun a b c -> printfn "%A %A %A" a b c
fun (a: int) (b: int) (c: int) -> a + b * c
fun x y -> let swap (a, b) = (b, a) in swap (x, y)
Использование лямбда-выражений
Лямбда-выражения особенно полезны, если вы хотите выполнять операции со списком или другой коллекцией, и хотите избежать дополнительной работы по определению функции. Многие функции библиотеки F# принимают значения функций в качестве аргументов, и это может быть особенно удобно для использования лямбда-выражения в этих случаях. Следующий код применяет лямбда-выражение к элементам списка. В этом случае анонимная функция проверяет, является ли элемент текстом, который заканчивается указанными символами.
let fullNotation = [ "a"; "ab"; "abc" ] |> List.find ( fun text -> text.EndsWith("c") )
printfn "%A" fullNotation // Output: "abc"
let shorthandNotation = [ "a"; "ab"; "abc" ] |> List.find ( _.EndsWith("b") )
printfn "%A" shorthandNotation // Output: "ab"
В предыдущем фрагменте кода показаны оба нотации: использование ключевого fun
слова и краткое _.Property
нотация.