に自動的にインライン化されていますか?この#postはF#ニュースから、F#が引数として渡された関数をインライン化できることを示しています。 いつもそうですか?それは自動的に起こるか?すべてのlambda引数はF#
3
A
答えて
3
答えはいいえです。次のような関数がある場合、ラムダはインライン化されません。次のコードラムダで はFSharpFunc<,>.InvokeFast()
let fold f s l =
let rec loop acc l =
match l with []->acc |h::t->loop (f acc h) t
loop s l
let list = [1;2;3;4]
list|>fold (fun acc x->x+acc) 0|>printfn "%d"
list|>fold (fun acc x->x*acc) 1|>printfn "%d"
を使用して呼び出されます。しかし、あなたはinline
、状況の変化に応じてfold
機能をマークしている場合。 fold
関数はインライン展開されるだけでなく、ラムダもインライン展開されます。 .NET Reflectorを使用して確認しました。
2
コンパイラが高次関数に対してどのような最適化を行うのか分かりませんが、この記事は明示的にinline
とマークされた型一般化関数を参照しているようです。これはstatically resolved type parametersをサポートするためです。
関連する問題
- 1. f.apply(ヌル、引数)とf(引数)
- 2. F#プログラムのコマンドライン引数?
- 3. F#関数の引数は、私はF#関数で引数の特定のタイプを持ちたい
- 4. pandasは引数なしの関数を適用します。lambda
- 5. lambdaのlambda関数で "this"を取り込む方法は?例</p> <pre><code>class A { void f() {} void g() { [this]() // Lambda capture this { f(); A* p = this; [p]() // Workaround to let inner lambda capture this { p->f(); }; }; } }; </code></pre> <p>については
- 6. `char`引数を取るためのlambda
- 7. すべての引数は、R
- 8. F#noob:一致するコマンドライン引数
- 9. F#の引用:変数がスコープ
- 10. F#で複数の引数を使用してメソッドをダックする方法は?
- 11. F#は関数の引数としてダウンキャスト型を提供します
- 12. どの関数fに対してdf.apply(f)はすべての負の値をゼロに変換しますか?
- 13. 関数へのLambdaメソッドの参照<F,T> NoClassDefFoundErrorをスローする
- 14. lambdaのクロスプラットフォーム "auto"キーワードの使用:関数の引数としてのintegral_constant
- 15. F#すべての整数をリストに集計する
- 16. F#ジェネリック関数の引数をジェネリック関数で定義する方法は?
- 17. JAVA +プリントすべての内線引数
- 18. オプション引数すべてのサブパーサー
- 19. 引数としてC++のlambda。エラー:削除された関数の使用
- 20. 模擬クラスの引数マッチングにJava8 lambdaを使用する
- 21. f(n)= log(n)^ mはすべての自然数mに対してO(n)
- 22. F#で可変数の引数を取る関数を書くには
- 23. AWS Lambdaはすべての発信URLコールをブロックします
- 24. 関数に渡されるすべての引数(対のみ$オプションの引数)のみのオプションの引数
- 25. Python 3のlambdaは引数リファレンスをどのように扱いますか?
- 26. F#のクラケンプライベートAPIが返すEGeneral:無効な引数
- 27. 上記のf(x)の代わりにlambda関数を実行する次のコードはなぜですか?
- 28. Amazon lambda dynamodb update_item()はキーワード引数のみを受け入れます。
- 29. 「!f:〜0,3!」とは何ですか?ループのコマンドライン引数で行うのですか?
- 30. haskellのすべての引数に関数を適用する