gpt4 book ai didi

OCaml 函数调用顺序错误

转载 作者:行者123 更新时间:2023-12-02 08:27:06 25 4
gpt4 key购买 nike

是的,所以这是一个让我大吃一惊的奇怪问题。基本上,我正在开发一个构建系统,让您可以选择在主构建之前和之后运行 shell 命令。要执行这些命令,我​​只使用 Sys.command。问题是每当我使用该函数时,它都会改变调用函数的顺序。例如:

Sys.command "echo 'Hi!'";
Printf.printf "second\n";
Sys.command "echo 'Bye!'"

输出

Hi!
Bye!
second

来自 REPL 和编译后的可执行文件。但是,如果我使用任何其他功能,它似乎工作正常。有趣的是,如果我定义一个函数来调用 Sys.command,它仍然会以错误的顺序执行。我已经在 GNU/Linux 上运行的 4.02.1 和 Cygwin 上的 4.01.0 上测试了这个,并且在两者上都得到了相同的行为。据我所知, ; 不会影响调用顺序。我在这里遗漏了什么吗?

最佳答案

你有一个缓冲问题。

试试这个:

Sys.command "echo 'Hi!'";
Printf.printf "second\n%!";
Sys.command "echo 'Bye!'"

%! 说明符表示在该点刷新缓冲区。

因为它是一种混合范式语言(有副作用),所以 OCaml 表达式以可预测的顺序执行。你可以依靠这个。如果事情似乎没有按顺序执行,则说明还有其他事情正在发生。

(作为旁注,请注意函数参数的求值顺序不受限制。)

关于OCaml 函数调用顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com