在ocaml toplevel中,我可以通过输入以下命令来使用“bitstring”包:
#use "topfind";;
#camlp4o;;
#require "bitstring.syntax";;
let data = 0l;;
let bits = BITSTRING { data : 32 };;
但是,如果我创建一个OCaml脚本,例如foo.ml:
#!/usr/bin/env ocaml
#use "topfind";;
#camlp4o;;
#require "bitstring.syntax";;
let data = 0l;;
let bits = BITSTRING { data : 32 };;
而且,如果我运行OCaml脚本,则会出现语法错误:
$ ./foo.ml
File "./foo.ml", line 8, characters 28-29: Error: Syntax error
我在这里缺少什么?为什么相同的代码适用于交互式shell,但不适用于脚本文件?
答案 0 :(得分:4)
我认为这是因为脚本文件首先被解析,然后执行指令,因此它无法处理未知(尚未)的语法。
最简单的解决方案是使用ocamlscript:
#! /usr/bin/env ocamlscript
Ocaml.packs := [ "bitstring"; "bitstring.syntax" ]
--
let data = 0l;;
let bits = BITSTRING { data : 32 };;