4

ocaml トップレベルでは、次のコマンドを入力して「bitstring」パッケージを使用できます。

#use "topfind";;
#camlp4o;;
#require "bitstring.syntax";;

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

ただし、たとえば foo.ml などの OCaml スクリプトを作成すると、次のようになります。

#!/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

ここで何が欠けていますか?同じコードが対話型シェルでは機能するのに、スクリプト ファイルでは機能しないのはなぜですか?

4

1 に答える 1

4

これは、スクリプト ファイルが最初に解析されてからディレクティブが実行されるため、未知の (まだ) 構文を処理できないためだと思います。

最も簡単な解決策は、ocamlscriptを使用することです:

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

let data = 0l;;
let bits = BITSTRING { data : 32 };;
于 2014-01-20T03:44:06.090 に答える