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.