OCaml 异常的执行顺序问题
Unusual order-of-execution problem with OCaml
我是 OCaml 新手。我写了这个非常简单的程序:
open Stdio
let getline =
match In_channel.input_line In_channel.stdin with
| Some x -> x
| None -> "No input"
;;
let () =
printf "What's your name? ";
printf "Hi, %s!" getline;;
及其几种变体。
你懂的。我询问用户的姓名并打印“嗨,[姓名]!”。
有效,但输出顺序错误。我用 dune 构建项目,运行 可执行文件,没有得到任何输入名称的提示,我输入它然后我立刻得到所有“你叫什么名字?嗨,[name]!”。
现在,我了解了 OCaml 中缓冲的基础知识。事实上,我记得前一段时间涉足 OCaml 时遇到了同样的问题。我清楚地记得读过这篇文章:
The strange order of code execution in OCaml
而且我几乎可以肯定添加“%!”工作了。我什至试过
Out_channel.flush stdout
在两个 printf 之间,它不起作用。我试过在第一个 printf 中添加一个“\n”。我已经在几个终端上试过了。
我敢肯定这真的很简单,可能只是基本语法。
您将 getline
定义为变量,而不是函数。
函数必须始终接受一个参数,尽管该参数可以是 ()
:
open Stdio
let getline () =
match In_channel.input_line In_channel.stdin with
| Some x -> x
| None -> "No input"
;;
let () =
printf "What's your name? ";
printf "Hi, %s!" (getline ());;
我是 OCaml 新手。我写了这个非常简单的程序:
open Stdio
let getline =
match In_channel.input_line In_channel.stdin with
| Some x -> x
| None -> "No input"
;;
let () =
printf "What's your name? ";
printf "Hi, %s!" getline;;
及其几种变体。
你懂的。我询问用户的姓名并打印“嗨,[姓名]!”。
有效,但输出顺序错误。我用 dune 构建项目,运行 可执行文件,没有得到任何输入名称的提示,我输入它然后我立刻得到所有“你叫什么名字?嗨,[name]!”。
现在,我了解了 OCaml 中缓冲的基础知识。事实上,我记得前一段时间涉足 OCaml 时遇到了同样的问题。我清楚地记得读过这篇文章:
The strange order of code execution in OCaml
而且我几乎可以肯定添加“%!”工作了。我什至试过
Out_channel.flush stdout
在两个 printf 之间,它不起作用。我试过在第一个 printf 中添加一个“\n”。我已经在几个终端上试过了。
我敢肯定这真的很简单,可能只是基本语法。
您将 getline
定义为变量,而不是函数。
函数必须始终接受一个参数,尽管该参数可以是 ()
:
open Stdio
let getline () =
match In_channel.input_line In_channel.stdin with
| Some x -> x
| None -> "No input"
;;
let () =
printf "What's your name? ";
printf "Hi, %s!" (getline ());;