我正在使用链表列表,我希望它得到一个下溢错误,所以我可以看到它正常工作.但是,它一直给我一个约束错误消息,我希望在那里有下溢消息.任何有关做什么的提示都会有所帮助.我目前无法提供代码,因为我的服务器已关闭,但我会尽快更新
两种方式:(好吧,三......)
(1)清洁方式:确保在下溢情况下不违反约束.
由于显式检查,您可能认为它很慢.但是,无论是否算作过早优化,无论如何都会隐式地进行检查以引发Constraint_Error.这实际上是否花费任何时间取决于您的编译器和优化级别.有了一个好的编译器,它可能不会.
Underflow_Error : Exception; Declare A,B,C : Natural; D : Integer; -- a "bigger" type that can accommodate the worst case value Begin -- A := B - C; -- may raise constraint error D := B - C; if D < 0 then raise Underflow_Error; else A := D; end if; End;
(2)捕获约束错误并改为提升你的.这是不干净的,因为同一范围内的任何其他约束错误将(误导性地)转换为下溢错误.
Underflow_Error : Exception; Declare A,B,C : Natural; Begin A := B - C; -- Let it raise constraint error Exception: when Constraint_Error => -- convert to my exception raise Underflow_Error; -- when others => raise; -- un-handled exceptions are passed upwards anyway End;
(3)变体(2)捕捉约束误差,进行事后分析并适当提高.额外的计算仅在特殊情况下,因此基本上没有性能影响.
Underflow_Error : Exception; Declare A,B,C : Natural; Begin A := B - C; -- Let it raise constraint error Exception: when Constraint_Error => -- if appropriate, convert to my exception if B - C < 0 then raise Underflow_Error; else raise; end if; End;