Sto giocando nella finestra interattiva f # e ho scoperto che printf non funzionava come mi aspettavo. Nel seguente frammento, la ReadLine eseguito prima del primo 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()
Se cambio la printf per Console.WriteLine funziona come previsto.
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()
Che cosa sta succedendo con printf? C'è una chiamata flush
Posso farla stampare prima della lettura? C'è una f # readline che dovrei usare?
----------------- [Edit] --------------------
Dopo aver letto La risposta di Fyodor Soikin, ho provato a verificare quanto segue. Abbastanza sicuro, ciò che è stato stampato sullo schermo è stato Hello
e dopo aver inserito un input, ha stampato 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' è equivalente a' printfn', non 'printf'. Forse la tua console non esegue il rendering del testo fino a quando non viene ricevuta una nuova riga? –
Infatti, @FyodorSoikin è corretto: se si cambia 'printf' in' printfn', la funzione 'run' funziona come ci si aspetterebbe. In ogni caso, è possibile fare a meno della funzione 'ignore' e non è necessario svuotare la console. –
Sì. Ho confermato anche questo. Ho anche confermato che è coerente con 'Console.Write' vs' Console.Writeline'. Questo solleva solo la domanda, perché 'Console.Write' non scrive sull'output come previsto? Ho persino lavato il buffer. –