私はf#対話型ウィンドウで遊んでいて、printfが期待どおりに動作しないことを発見しました。私は期待どおりに動作しますConsole.WriteLineをするのprintfを変更する場合は、次のスニペットでは、ReadLineメソッドは、最初のprintfF#:printf vs Console.WriteLine
let run() =
printf "What is your name?"
Console.Out.Flush()
let value = System.Console.ReadLine()
printf "Hello, %s, nice to meet you!" value
run()
前に実行されます。
let run() =
Console.Out.WriteLine "What is your name?"
Console.Out.Flush()
let value = System.Console.ReadLine()
printf "Hello, %s, nice to meet you!" value
run()
printfでは何が起こっていますか? readlineの前に印刷することができるflush
コールはありますか?私が使用するはずのf#readlineはありますか?
----------------- [編集] --------------------
読んだ後Fyodor Soikinの答え、私は検証するために以下を試みた。確かに、スクリーンに印刷されたものはHello
であり、何らかの入力をした後にはWorld
と表示されました。
open System
let run() =
printf "Hello\n World"
let value = System.Console.ReadLine()
let msg = sprintf "Hello, %s, nice to meet you!" value
printf "%s" msg
run()
'WriteLine'は' printf'ではなく 'printfn'に相当します。おそらくあなたのコンソールは、改行が受信されるまでテキストをレンダリングしないでしょうか? –
実際、@FyodorSoikinは正しいです: 'printf'を' printfn'に変更した場合、 'run'関数は期待通りに機能します。いずれにしても、 'ignore'関数を省略することができ、コンソールをフラッシュする必要はありません。 –
はい。私もこれを確認しました。また、 'Console.Write'対' Console.Writeline'と一貫していることも確認しました。これは疑問を提起するだけですが、 'Console.Write'が出力に期待どおりに書き込まないのはなぜですか?私はバッファーを洗い流した。 –