Compartilhar via


Funções embutidas (F#)

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

Usando 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 os parâmetros comuns de tipo genérico, não há nenhuma restrição.

Diferente de ativar o uso de restrições de membro, funções embutidas podem ser úteis na otimização de código. No entanto, o uso excessivo de funções embutidas pode causar seu código seja menos resistentes a alterações em otimizações do compilador e a implementação das funções de biblioteca. Por esse motivo, você deve evitar usar funções embutidas para otimização, a menos que você tenha tentado todas as outras técnicas de otimização. Tornar um embutido de função ou método, à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 de 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 a inferência de tipo. Isso ocorre porque o funções embutidas podem resolveram estaticamente parâmetros de tipo, enquanto as funções não embutidas 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 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 o modificador do 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#)