F#における `inline` の使用
質問
その
inline
例えば、関数の型に影響を与えるようです("静的に解決された型パラメータとは何ですか"?F#の型はすべて静的に解決されないのでしょうか?)
いつ
inline
関数を使うべきでしょうか?
どのように解決するのですか?
この
inline
キーワードは、関数定義がそれを使用するコードにインラインで挿入される必要があることを示します。 ほとんどの場合、これは関数の型に何の影響も与えません。 しかし、まれに、より一般的な型を持つ関数になることがあります。これは、.NET のコードのコンパイル形式では表現できないが、関数がインライン化されるときに強制できる制約があるためです。
これが適用される主なケースは、演算子の使用です。
let add a b = a + b
は単相の推論された型(おそらく
int -> int -> int
のようなものである可能性があります。
float -> float -> float
のようになる可能性もあります.) しかし、この関数をインラインでマークすることにより、F#コンパイラは多相型を推測します。
let inline add a b = a + b
// add has type ^a -> ^b -> ^c when ( ^a or ^b) : (static member ( + ) : ^a * ^b -> ^c)
この型制約を.NET上のコンパイルされたコードで第一級の方法でエンコードする方法はありません。 しかし、F#コンパイラは関数をインライン化するサイトでこの制約を強制することができるので、すべての演算子の使用はコンパイル時に解決されます。
型パラメータ
^a
,
^b
そして
^c
は"静的解決型パラメータ"であり、これは引数の型がこれらのパラメータが使用されているサイトにおいて静的に知られていなければならないことを意味します。 これは、通常の型パラメータ(例えば
'a
,
'b
など)、パラメータは「quot;後で提供されるが、何でも可能ないくつかのタイプ」のような意味です。
関連
-
[解決済み] 関数/メソッドのキーワード 'inline' はいつ書けばよいのですか?
-
[解決済み】ActiveRecordのFloatとDecimalの比較
-
[解決済み】C++11のautoキーワードはどこまでがやりすぎ?
-
[解決済み] 汎用型と関連型の使い分けはいつが適切ですか?
-
[解決済み】Haskell/GHCの`forall`キーワードは何をするのですか?
-
[解決済み] F#からOCamlへの変更 [終了しました]。
-
[解決済み] OCaml/F#の関数はなぜデフォルトで再帰的でないのですか?
-
[解決済み] 静的インライン関数は絶対に使ってはいけないのか?
-
[解決済み] F#は同じプロジェクト内の別のファイルで型/モジュールを定義/使用する
-
F#によるアプリケーションアーキテクチャ/構成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン