0

トップレベルについて間違った方法で考えているかもしれません。プロジェクトの一部としてトップレベルのディレクティブのコレクションを維持するための推奨される方法は何ですか?

OCaml ソース ファイルのようなトップレベル ディレクティブを含め#install_printerて、プログラムのコンパイル時には無視され、実行時にはトップレベルで実行されるようにする方法はありますか?

理想的には、ディレクティブ自体が無視されたとしても、プログラムのコンパイル時にディレクティブの型をチェックしたいと思います。

type 'a with_infinity = Finite of 'a | Infinite

let print_int_with_infinity pp item =
(match item with
    | Infinite -> Format.pp_print_string pp "Infinite"
    | Finite i -> Format.pp_print_int pp i)

(* install printer cannot occur in this context *)
#install_printer print_int_with_infinity
4

2 に答える 2

2

トップレベルで作業する良い方法.ocamlinitは、プロジェクトのルートにファイルを置くことです。このファイルは、起動時utopまたはocaml同じディレクトリからロードされます。

通常は次のようになります。

#use "topfind";;
#require "this";;
#ことを要求";;

let _printer = ...;;
#install_printer _printer;;
...

これに関連して、環境変数OCAMLPATHが に設定されていて/path/to/my/project:...、 に適切なMETAファイルがある場合、 を使用/path/to/my/project/fooしてプロジェクト ローカルfooライブラリとその依存関係を読み込むことができます#require "foo"

于 2015-12-28T22:54:12.880 に答える
2

これを行う事前定義された方法はありませんが、コンパイル時にプリプロセッサにディレクティブを削除させることができます。

プリミティブを型チェックするためにできる最善の方法は、それを次のように前処理することです

#install_printer some_function

let _ = (some_function:Format.formatter -> 'a -> unit)

于 2015-12-28T17:45:19.050 に答える