我在名为 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 会在这个未处理的异常上静默失败?这种行为正常吗?是否有一些我可以放在 main 上的通用处理程序来打印发生的错误?我意识到我可以匹配异常 OhNoes,但是对于带有我可能不知道的异常的大型程序呢?