Compartilhar 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#)

Parâmetros de tipo resolvidos estaticamente (F#)