我的t.ms
文件包含:
interface(prettyprint=0): kernelopts(assertlevel=1):
ASSERT(1<1):
ASSERT(2<2):
当我跑步时:
maple -q t.ms; echo $?
我明白了:
Error, assertion failed
Error, assertion failed
0
当我跑步时:
maple -e 2 -q t.ms; echo $?
我明白了:
Error, assertion failed
0
我想得到:
Error, assertion failed
4
也就是说,我希望Maple在第一次失败的断言时以非零退出状态退出。 (如果退出代码为1或其他任何内容,我都不在乎,只要它非零。我已经从documentation得到了与错误相关的数字4 )我该怎么做?
答案 0 :(得分:2)
文档没有说明必须使用,
`quit`(n)
使用名称引用。
interface(prettyprint=0):
handler:=proc(e::uneval)
local failed;
printf("entered\n"); # remove this when satisfied
failed:=false;
try
if evalb(eval(e)) <> true then
error;
end if;;
catch:
failed:=true;
printf("Error, assertion failed\n");
finally;
if failed then
`quit`(5);
end if;
end try;
true;
end proc:
ASSERT( handler( 1<1 )):
ASSERT( handler( 2<2 )):
现在,将其保存为文件uh.mpl
,然后使用Maple 18.01 for Linux,我看到了,
$ maple18.01 -q -A 2 ~/uh.mpl ; echo $?
entered
Error, assertion failed
5
如果在没有-A 2
的情况下运行,那么它就不会运行断言的检查。
[编辑]以下是一个小小的修改,以便在打印过程中处理其他参数。
handler:=proc(e::uneval)
local failed;
printf("entered\n"); # remove this when satisfied
failed:=false;
try
if evalb(eval(e)) <> true then
error;
end if;;
catch:
failed:=true;
printf("Error, assertion failed, %q\n", _rest);
finally;
if failed then
`quit`(5);
end if;
end try;
true;
end proc: