0
我已經寫在OCaml的一些代碼,執行類似於以下OCaml的遞歸打印到頂層
let rec main() =
DO STUFF...
let print_time() =
let time = Unix.localtime (Unix.time()) in
let hour = string_of_int (time.Unix.tm_hour) in
let minute = string_of_int (time.Unix.tim_min) in
print_string ("\n Time -- "^hour^":"^minute)
in
Lwt.bind(Lwt_unix.sleep 30.)
(fun() -> (print_time(); main();)
;;
main();;
此代碼完全運行在頂層動作,但是似乎該時間已經被印刷到緩衝器而不是立即打印到屏幕上。當我向頂層提供另一個命令時,緩衝區中的所有時間立即打印到屏幕上。
我該如何糾正這個問題,以便在每次調用print_time()
時將時間打印到頂層,而不是當我給頂層命令時?
示例:如果我運行該程序,然後等待2分鐘,然後在頂級輸入內容之前輸入以下內容。如果我沒有在頂層輸入任何東西,那麼我只收到第一次的消息。
# #use "this_program";;
Time -- 12:03
# let x = 1;;
time -- 12:03
time -- 12:04
time -- 12:04
time -- 12:05
time -- 12:05
val x : int = 1
#
而且,這種「循環」只能使用一次(main()
不會遞歸調用本身)在本地編譯的代碼,我不知道如何糾正。