1

假设我正在使用一个包函数f,它接受一个参数x并对该参数执行一些错误检查。像,是x正确的类型?等等。如果出现错误,则f(x)使用Error().

有没有一种简单的方法可以编写一个包装函数fCatchf捕获该错误,如果f(x)抛出错误则返回 false,否则返回 true?实现同样效果的简单方法是复制代码f并将所有Error(...);行更改为 areturn false;并在末尾设置 a return true;,但复制所有错误检查代码是一种不好的形式。

4

1 回答 1

1

根据Alexander Konovalov 的评论,以下工作,除了触发的Error(...)消息f(x)仍然打印。

fCatch := function(x)
local result;
    BreakOnError := false;
    result := CALL_WITH_CATCH(f, [ x ])[1];;
    BreakOnError := true;
    return result;
end;

警告:该CALL_WITH_CATCH函数和任何其他名称全部大写的函数未记录在案,仅供 GAP 内部使用。

于 2020-07-05T22:50:19.527 回答