Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Nyckelordet fun används för att definiera ett lambda-uttryck, dvs. en anonym funktion.
Syntax
fun parameter-list -> expression
Eller med hjälp av den korta notationen _.Property :
_.
fun, parameter-list och lambda arrow (->) utelämnas och _. är en del av uttrycket där _ ersätter parametersymbolen.
Följande kodfragment är likvärdiga:
(fun x -> x.Property)
_.Property
Anmärkningar
Parameterlistan består vanligtvis av namn och, om du vill, typer av parametrar. Mer allmänt kan parameterlistan bestå av alla F#-mönster. En fullständig lista över möjliga mönster finns i Mönstermatchning. Listor med giltiga parametrar innehåller följande exempel.
// 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] -> …
Uttrycket är brödtexten i funktionen, vars sista uttryck genererar ett returvärde. Exempel på giltiga lambda-uttryck är följande:
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)
Använda Lambda-uttryck
Lambda-uttryck är särskilt användbara när du vill utföra åtgärder i en lista eller annan samling och vill undvika det extra arbetet med att definiera en funktion. Många F#-biblioteksfunktioner använder funktionsvärden som argument, och det kan vara särskilt praktiskt att använda ett lambda-uttryck i dessa fall. Följande kod tillämpar ett lambda-uttryck på element i en lista. I det här fallet kontrollerar den anonyma funktionen om ett element är text som slutar med angivna tecken.
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"
Föregående kodfragment visar båda notationerna: med nyckelordet fun och den korta _.Property notationen.