Funkcje śródwierszowe (F#)
Wbudowane funkcje są funkcje, które są zintegrowane bezpośrednio kod wywołujący.
Za pomocą wbudowanej funkcji
Gdy używane są parametry typu statycznego, wszelkie funkcje, które są parametryzowane przez parametry typu musi być wbudowany.Gwarantuje to, że kompilator może rozwiązać te wpisz parametry.Gdy używane są parametry typu rodzajowego w zwykłym, nie ma takich ograniczeń.
Inne niż umożliwiające użycie Członkowskich ograniczenia, wbudowane funkcje mogą być pomocne przy optymalizacji kodu.Nadmierne zużycie wbudowanej funkcji może jednak powodować kod, za mniej odporne na zmiany w optymalizacje kompilatora i implementacji funkcji biblioteki.Z tego powodu należy unikać przy użyciu funkcji wbudowanej dla optymalizacji, chyba że wypróbowaniu wszystkich innych technik optymalizacji.Dokonywania wbudowanych funkcji lub metody czasami można poprawić wydajność, ale nie jest to zawsze sprawy.W związku z tym aby sprawdzić, czy dokonywania wszelkich danej funkcji wbudowanych w rzeczywistości mają pozytywny wpływ należy również używać pomiarów wydajności.
inline Modyfikator mogą być stosowane do funkcji na najwyższym poziomie, na poziomie modułu lub na poziomie metoda w klasie.
Poniższy przykład kodu pokazuje funkcji śródwierszowej na najwyższym poziomie, wbudowanej metody instancji i wbudowany, statycznej metody.
let inline increment x = x + 1
type WrapInt32() =
member inline this.incrementByOne(x) = x + 1
static member inline Increment(x) = x + 1
Wbudowane funkcje i wnioskowanie typu
Obecność inline wpływa na wpisz wnioskowanie.Wynika to wbudowane funkcje można statycznie postanowiły parametrów typu, innych niż wbudowane funkcje nie mogą.Poniższy przykład kodu pokazuje w przypadku gdy inline jest pomocne, ponieważ korzysta z funkcji, która ma parametr typu statycznie rozwiązane, float konwersji operatora.
let inline printAsFloatingPoint number =
printfn "%f" (float number)
Bez inline , modyfikator typu wnioskowanie wymusza funkcji podjęcie określonego typu, w tym przypadku int.Jednak z inline modyfikator, funkcja jest również kojarzyć ma statycznie rozpoznać typu parametru.Z inline , modyfikator typu jest niezamierzone być następujące:
^a -> unit when ^a : (static member op_Explicit : ^a -> float)
Oznacza to, że funkcja przyjmuje dowolnego typu, który obsługuje konwersję do float.