Partilhar via


Funções embutidas (F#)

Funções embutidas são funções que estão integradas diretamente o código de chamada.

Uso de funções embutidas

Quando você usa os parâmetros de tipo estático, todas as funções que são parametrizadas pelos parâmetros de tipo devem ser embutido.Isso garante que o que o compilador pode resolvê-los Digite parâmetros.Quando você usa o parâmetro de tipo genérico comum, não há nenhuma restrição.

Diferente de ativar o uso de restrições de membro, funções embutidas podem ser útil para otimização de código.No entanto, o uso exagerado de funções embutidas pode causar seu código seja menos resistentes a alterações no otimizações do compilador e a implementação das funções de biblioteca.Por esse motivo, você deve evitar o uso de funções embutidas para otimização, a menos que você tenha tentado todas as outras técnicas de otimização.Tornar o método ou função em linha, às vezes, pode melhorar desempenho, mas que não é sempre o caso.Portanto, você também deve usar medidas de desempenho para verificar se tornar qualquer in-line determinada função na verdade tem um efeito positivo.

O inline modificador pode ser aplicado às funções no nível superior, no nível de módulo ou no nível do método em uma classe.

O exemplo de código a seguir ilustra uma função embutida no nível superior, um método de instância in-line e um método estático do in-line.

let inline increment x = x + 1
type WrapInt32() =
    member inline this.incrementByOne(x) = x + 1
    static member inline Increment(x) = x + 1

As funções embutidas e inferência de tipo

A presença de inline afeta inferência.Isso ocorre porque o funções embutidas podem resolveram estaticamente parâmetros de tipo, ao passo que as funções embutidas não não é possível.O exemplo de código a seguir mostra um caso onde inline é útil porque você está usando uma função que tem um parâmetro de tipo estaticamente resolvido, o float o operador de conversão.

let inline printAsFloatingPoint number =
    printfn "%f" (float number)

Sem o inline modificador, a inferência de tipo força a função para levar a um tipo específico, nesse caso int.Mas com o inline modificador, a função também é inferido para ter um parâmetro de tipo estaticamente resolvido.Com o inline modificador, o tipo é inferido para ser o seguinte:

^a -> unit when ^a : (static member op_Explicit : ^a -> float)

Isso significa que a função aceita qualquer tipo que ofereça suporte a uma conversão de float.

Consulte também

Referência

Funções (F#)

Restrições (F#)

Resolvido estaticamente os parâmetros de tipo (F#)