Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Klíčové fun slovo se používá k definování výrazu lambda, tj. anonymní funkce.
Syntaxe
fun parameter-list -> expression
Nebo použijte zkrácený _.Property zápis:
_.
fun, parametr-list a lambda šipka (->) jsou vynechány a _. je součástí výrazu , kde _ nahrazuje symbol parametru.
Následující fragmenty kódu jsou ekvivalentní:
(fun x -> x.Property)
_.Property
Poznámky
Seznam parametrů se obvykle skládá z názvů a volitelně i typů parametrů. Obecně platí, že seznam parametrů se může skládat z libovolných vzorů jazyka F#. Úplný seznam možných vzorů najdete v tématu Porovnávání vzorů. Seznamy platných parametrů obsahují následující příklady.
// 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] -> …
Výraz je tělo funkce, poslední výraz, jehož poslední výraz vygeneruje návratovou hodnotu. Příklady platných výrazů lambda zahrnují následující:
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)
Používání výrazů lambda
Výrazy lambda jsou zvlášť užitečné, když chcete provádět operace se seznamem nebo jinou kolekcí a chcete se vyhnout nadbytečné práci při definování funkce. Mnoho funkcí knihovny jazyka F# bere hodnoty funkcí jako argumenty a v těchto případech může být zvláště vhodné použít výraz lambda. Následující kód aplikuje výraz lambda na prvky seznamu. V tomto případě anonymní funkce zkontroluje, zda je prvek text, který končí zadanými znaky.
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"
Předchozí fragment kódu ukazuje obě notace: použití klíčového fun slova a zápis zkrácené ruky _.Property .