如何解决OCaml 编译器在“in”上报告语法错误但交互式解释器运行没有缺陷
以下代码在 https://try.ocamlpro.com/ 上运行没有错误
open Printf
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
但在 Linux 上使用 ocamlopt
或 ocamlc
编译器时会触发语法错误。
ocamlc array.ml -o array
let l = ref [] in
^^
Error: Syntax error
解决方法
语法错误可能隐藏在您未包含的代码中。 看来你已经写了
open Printf
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
这是一个语法错误,因为顶级表达式不能跟在非表达式顶级项之后。这就是语法错误出现在 in
上的原因:此位置只允许顶级定义(因此没有 in
)。
这就是为什么通常建议使用顶级单元定义而不是表达式的原因:
open Printf
let () =
let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
通过这个小小的改变,你只有顶级定义,你不需要记住顶级表达式的规则。
另一个简单的选择是考虑所有顶级表达式都应该由 ;;
引入:
open Printf
;; let l = ref [] in
for i = 3 downto 0 do
l := i :: !l
done;
List.iter (printf "%d " ) !l
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。