我是OCaml的新手,现在我正在努力制作一个简单的REPL。
let rec repl () =
print_prompt () ;
let input = Scanf.scanf "%s" (fun x -> x) in
if input = "" then repl ()
else print_endline input
let print_prompt () = print_string "> "
我现在遇到的问题是:当程序启动时,它不会立即显示提示。它等待我的输入并打印提示以及我的输入。
我想要的是:
> "user_input"
"user_input"
但我得到了:
"user_input"
> "user_input"
我该如何解决这个问题?
答案 0 :(得分:2)
嗯,你没有显示print_promt
实现,但我可以猜测,它使用了一些缓冲的io函数,如print_string
或printf
。它们打印到中间缓冲区,除非调用flush
,否则不会显示数据。您可以使用flush
或flush_all
函数手动执行此操作。您还可以使用%!
格式字符串中的特殊指定符printf
:
open Printf
let print_prompt () = printf "> %!"
答案 1 :(得分:2)
这几乎肯定是一个缓冲问题。在print_prompt
函数中,刷新标准输出:
flush stdout