2

F# で文字列を作成するには、少なくとも 3 つの方法があります。

  1. 古き良き連結 (途中で .ToString(someFormat) を使用)
  2. .NET のメソッド String.Format を使用する
  3. sprintf 関数の使用

F# ではどれに固執する必要がありますか?

4

1 に答える 1

5

一般に、タイプ セーフな F# コードでは、printfベースの関数 ( ,sprintfなどbprintf) を使用する必要があります。コンパイラは、コンパイル時に書式文字列をチェックし、正しい引数の型を渡していることを確認します。

ただし、これには欠点が 1 つあります。F# 2.0 および 3.0 では、 にprintf基づく関数は非常に低速です (StackOverflow または Google を検索すると、それに関する質問やブログ投稿が見つかります)。ときどき使用する場合は、アプリケーションの全体的なパフォーマンスに影響を与えませんが、頻繁に呼び出すと、アプリケーションの速度が低下することに気付くでしょう。ありがたいことに、これは今後の F# 3.1 リリースで修正されています。

他のオプションについては、可能な限り文字列の連結を避ける必要があります。これは比較的遅く、余分なメモリ/GC オーバーヘッドが発生するためです。パフォーマンスが重要なロギングを実装していて、F# 3.1 が待ちきれない場合は、String.Format が最善の策です。ベースの関数によって提供される型安全性を模倣するにはprintf、String.Format への各呼び出しを別の関数に移動し、型注釈を使用してパラメーターの型を明示的に指定します。例えば:

/// Prints the number of entries in a specified file to the console.
let inline printNumEntriesInFile (filename : string) (count : int) =
    System.String.Format ("The file '{0}' contains {1} entries.", filename, count)
于 2013-09-08T17:08:16.377 に答える