2014-01-20 21 views
4

OCaml中顶层内位串,我可以通过键入以下命令使用“位串”包:ocaml的脚本

#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一起使用,但不能与脚本文件一起使用?

回答

4

我认为这是因为脚本文件首先被解析,然后指令被执行,因此它不能处理未知(但)语法。

,最简单的解决方案是使用ocamlscript

#! /usr/bin/env ocamlscript 
Ocaml.packs := [ "bitstring"; "bitstring.syntax" ] 
-- 

let data = 0l;; 
let bits = BITSTRING { data : 32 };;