Ada 2012中的自定义条件失败消息

Ada 2012中的自定义条件失败消息,ada,predicate,design-by-contract,preconditions,post-conditions,Ada,Predicate,Design By Contract,Preconditions,Post Conditions,是否有一种方法可以为前置条件和后置条件指定自定义错误/失败消息,类似于谓词的Predicate\u failure?我似乎在官方文件中找不到任何东西。TIA.您可以使用如下示例所示的raise表达式(参见示例) main.adb pragma Assertion_Policy (Check); with Ada.Text_IO; with Ada.Float_Text_IO; procedure Main is package TIO renames Ada.Text_IO;

是否有一种方法可以为前置条件和后置条件指定自定义错误/失败消息,类似于谓词的
Predicate\u failure
?我似乎在官方文件中找不到任何东西。TIA.

您可以使用如下示例所示的raise表达式(参见示例)

main.adb

pragma Assertion_Policy (Check);

with Ada.Text_IO;
with Ada.Float_Text_IO;

procedure Main is
   
   package TIO renames Ada.Text_IO;
   package FIO renames Ada.Float_Text_IO;
   
   
   function Reciprocal (X : Float) return Float is (1.0 / X)
     with Pre => (X /= 0.0 or else
                    raise Constraint_Error with "X must not be 0.");
   
begin
   FIO.Put (Reciprocal (2.0));
   TIO.New_Line;
   
   FIO.Put (Reciprocal (0.0));
   TIO.New_Line;   
end Main;
输出

$ ./obj/main
 5.00000E-01

raised CONSTRAINT_ERROR : X must not be 0.
[2020-07-03 22:20:25] process exited with status 1, elapsed time: 00.32s

太好了,谢谢你!不知怎么错过了这里显而易见的东西,不客气。我稍微更新了示例:您也可以使用
或else
而不是
if
表达式。