Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 .