Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A fun palavra-chave é usada para definir uma expressão lambda, ou seja, uma função anônima.
Sintaxe
fun parameter-list -> expression
Ou usando a _.Property notação abreviada:
_.
fun, a lista de parâmetros e a seta lambda (->) são omitidas e a _. é uma parte da expressão em que _ substitui o símbolo de parâmetro.
Os snippets a seguir são equivalentes:
(fun x -> x.Property)
_.Property
Observações
A lista de parâmetros normalmente consiste em nomes e, opcionalmente, tipos de parâmetros. Em geral, a lista de parâmetros pode ser composta por qualquer padrão F#. Para obter uma lista completa de padrões possíveis, consulte Correspondência de Padrões. Listas de parâmetros válidos incluem os exemplos a seguir.
// 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 expressão é o corpo da função, a última expressão da qual gera um valor retornado. Exemplos de expressões lambda válidas incluem o seguinte:
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)
Usando Expressões Lambda
Expressões Lambda são especialmente úteis quando você deseja executar operações em uma lista ou outra coleção e deseja evitar o trabalho extra de definição de uma função. Muitas funções de biblioteca F# usam valores de função como argumentos e pode ser especialmente conveniente usar uma expressão lambda nesses casos. O código a seguir aplica uma expressão lambda a elementos de uma lista. Nesse caso, a função anônima verifica se um elemento é um texto que termina com caracteres especificados.
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"
O snippet de código anterior mostra as duas notações: usando a fun palavra-chave e a notação abreviada _.Property .