Udostępnij za pomocą


Wyrażenia lambda: zabawne słowo kluczowe (F#)

Słowo fun kluczowe służy do definiowania wyrażenia lambda, czyli funkcji anonimowej.

Składnia

fun parameter-list -> expression

Możesz też użyć notacji skróconej _.Property :

_.

fun, lista-parametrów i strzałka lambda (->) są pomijane, a _. element jest częścią wyrażenia , gdzie _ zastępuje symbol parametru.

Następujące fragmenty kodu są równoważne:

(fun x -> x.Property) _.Property

Uwagi

Lista parametrów zwykle składa się z nazw i, opcjonalnie, typów parametrów. Ogólnie rzecz biorąc, lista parametrów może składać się z dowolnych wzorców języka F#. Aby uzyskać pełną listę możliwych wzorców, zobacz Dopasowywanie wzorców. Listy prawidłowych parametrów zawierają następujące przykłady.

// 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] -> …

Wyrażenie jest treścią funkcji, ostatnim wyrażeniem, które generuje wartość zwracaną. Przykłady prawidłowych wyrażeń lambda obejmują następujące elementy:

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)

Korzystając z wyrażenia Lambda

Wyrażenia lambda są szczególnie przydatne, gdy chcesz wykonywać operacje na liście lub innej kolekcji i chcesz uniknąć dodatkowej pracy podczas definiowania funkcji. Wiele funkcji biblioteki języka F# bierze wartości funkcji jako argumenty i może być szczególnie wygodne, aby w tych przypadkach używać wyrażenia lambda. Poniższy kod stosuje wyrażenie lambda do elementów listy. W takim przypadku funkcja anonimowa sprawdza, czy element jest tekstem kończącym się określonymi znakami.

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"

Poprzedni fragment kodu przedstawia zarówno notacje: użycie słowa kluczowego fun , jak i notację skróconą _.Property .

Zobacz także