インライン関数Inline Functions

インライン関数関数が呼び出し元のコードに直接統合されています。Inline functions are functions that are integrated directly into the calling code.

インライン関数を使用Using Inline Functions

静的な型のパラメーターを使用するときに型パラメーターでパラメーター化されるすべての関数はインラインである必要があります。When you use static type parameters, any functions that are parameterized by type parameters must be inline. これは、コンパイラがこれらの型パラメーターを解決できることが保証されます。This guarantees that the compiler can resolve these type parameters. 通常のジェネリック型パラメーターを使用すると、このような制限はありません。When you use ordinary generic type parameters, there is no such restriction.

インライン関数がメンバー制約の使用を有効にする以外には、コードを最適化することができます。Other than enabling the use of member constraints, inline functions can be helpful in optimizing code. ただし、インライン関数の過剰使用には、コード コンパイラの最適化とライブラリ関数の実装の変更に小さいされにくい可能性があります。However, overuse of inline functions can cause your code to be less resistant to changes in compiler optimizations and the implementation of library functions. このため、他のすべての最適化手法をしようとした場合を除き、最適化のインライン関数の使用を避ける必要があります。For this reason, you should avoid using inline functions for optimization unless you have tried all other optimization techniques. 関数またはメソッドのインラインを行うことができます、パフォーマンスが向上がありますは常に大文字と小文字になっていません。Making a function or method inline can sometimes improve performance, but that is not always the case. そのため、こと、特定の関数をインラインで行う実際には正の影響を確認するのにパフォーマンスの測定値を使用することも必要があります。Therefore, you should also use performance measurements to verify that making any given function inline does in fact have a positive effect.

inline修飾子は、最上位レベルで、モジュール レベルまたはクラスで、メソッド レベルでの関数に適用できます。The inline modifier can be applied to functions at the top level, at the module level, or at the method level in a class.

次のコード例は、最上位レベル、インライン インスタンス メソッドをおよびインラインの静的メソッドで、インライン関数を示しています。The following code example illustrates an inline function at the top level, an inline instance method, and an inline static method.

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

インライン関数と型推論Inline Functions and Type Inference

有無inlineに影響が推論を入力します。The presence of inline affects type inference. これは、非インライン関数のことはできませんが、インライン関数が静的に解決できる型のパラメーターがあるためです。This is because inline functions can have statically resolved type parameters, whereas non-inline functions cannot. 次のコード例は、場合を示しています、inlineを静的に解決される型パラメーターを持つ関数を使用しているので便利です、float変換演算子。The following code example shows a case where inline is helpful because you are using a function that has a statically resolved type parameter, the float conversion operator.

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

なし、inline修飾子、型の推論はこの場合、特定の種類を実行する関数intします。Without the inline modifier, type inference forces the function to take a specific type, in this case int. ただし、inline修飾子は、関数が静的に解決される型パラメーターを持つと推論も。But with the inline modifier, the function is also inferred to have a statically resolved type parameter. inline修飾子、型は、次の場所に推論されます。With the inline modifier, the type is inferred to be the following:

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

これは、関数への変換をサポートする任意の型を受け取ることを意味floatします。This means that the function accepts any type that supports a conversion to float.

関連項目See also