24

F# の次の 2 つのステートメントの違いは何ですか? それらは互いに比較して利点または欠点がありますか (明らかな構文の違いを除く)?

WriteLine() が .NET の一部であることは理解していますが、これがどのような意味を持つのかわかりません。

サンプルコード:

printfn "This is an integer: %d" 5
System.Console.WriteLine("This is an integer: {0}" , 5)
4

4 に答える 4

7

printfと比較した のような関数の長所と短所を次に示しますConsole.WriteLine

長所:

  • printfn関数はタイプ セーフです。

    printfn "This is an integer: %i" 5 // works
    printfn "This is an integer: %i" "5" // doesn't compile
    
  • で部分的な適用を行うのは簡単ですが、過負荷の数が多すぎるためにprintfnそうではありませんConsole.WriteLine:

    [1; 2; 3] |> List.iter (printfn "%i; ")
    
  • printfn指定子を介して F# 型をより適切にサポートし%Aます。

短所:

@mydogisbox が述べたようにパラメーターを再利用できないことを除けば、-like関数は(リフレクションを使用するため) よりもprintfnはるかに遅くなります。Console.WriteLineログの目的で前者を使用しないでください。

于 2013-06-12T18:08:01.360 に答える
4

スタイルとは別に、System.Console.WriteLineパラメーターを再利用できるという利点があります。System.Console.WriteLine("This is a integer twice: {0} {0}", 5)

また、ここで述べたように、F# オブジェクトのきれいな印刷を行うことができますが、これを使用printfnすることはできません。System.Console.WriteLineまた、タプルを使用しないため、部分適用を行うことができます。

他の人が指摘したように、printfnはリフレクションを使用するため、 よりも大幅に遅くなりますがPrintLine、タイプセーフでもあります。

于 2013-06-12T17:51:16.683 に答える