testexc.sml という名前のファイルに次の SML プログラムがあります。
structure TestExc : sig
val main : (string * string list -> int)
end =
struct
exception OhNoes;
fun main(prog_name, args) = (
raise OhNoes
)
end
次のように smlnj-110.74 でビルドします。
ml-build sources.cm TestExc.main testimg
sources.cm に含まれる場所:
Group is
csx.sml
次のようにプログラムを呼び出します (Mac OS 10.8 の場合):
sml @SMLload testimg.x86-darwin
プログラムを呼び出したときに何かが表示されることを期待していますが、返されるのはリターン コード 1 だけです。
$ sml @SMLload testimg.x86-darwin
$ echo $?
1
何を与える?この未処理の例外で SML がサイレントに失敗するのはなぜですか? この動作は正常ですか?発生したエラーを出力するメインに配置できる汎用ハンドラーはありますか? 例外 OhNoes を一致させることができることはわかっていますが、私が知らないかもしれない例外を含む大規模なプログラムについてはどうでしょうか?