Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Ключевое 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 нотация.