Megosztás a következőn keresztül:


Lambda kifejezések: A szórakoztató kulcsszó (F#)

A fun kulcsszó egy lambda kifejezés, vagyis egy névtelen függvény definiálására szolgál.

Szemantika

fun parameter-list -> expression

Vagy használja a _.Property rövidítést:

_.

fun, paraméterlista és lambda nyíl (->) ki van hagyva, és a _.kifejezés egy része, ahol _ a paraméter szimbóluma helyébe lép.

A következő kódrészletek egyenértékűek:

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

Megjegyzések

A paraméterlista általában nevekből és adott esetben paraméterek típusaiból áll. Általánosságban elmondható, hogy a paraméterlista bármilyen F#-mintából állhat. A lehetséges minták teljes listáját a Mintaegyeztetés című témakörben találja. Az érvényes paraméterek listája az alábbi példákat tartalmazza.

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

A kifejezés a függvény törzse, amelynek utolsó kifejezése visszatérési értéket hoz létre. Érvényes lambdakifejezések például a következők:

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)

Lambda-kifejezések használata

A Lambda-kifejezések különösen akkor hasznosak, ha listában vagy más gyűjteményben szeretne műveleteket végrehajtani, és el szeretné kerülni a függvények definiálásának többletmunkáját. Sok F#-kódtárfüggvény argumentumként veszi fel a függvényértékeket, és ezekben az esetekben különösen kényelmes lehet lambdakifejezést használni. Az alábbi kód egy lambda kifejezést alkalmaz egy lista elemeire. Ebben az esetben a névtelen függvény ellenőrzi, hogy egy elem megadott karakterekkel végződő szöveg-e.

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"

Az előző kódrészlet mindkét jelölést megjeleníti: a fun kulcsszót és a rövidítést _.Property .

Lásd még