Ada 2012 中的自定义条件失败消息
Custom condition failure messages in Ada 2012
有没有办法为前置条件和后置条件指定自定义 error/on 失败消息,类比为谓词 Predicate_Failure
?我似乎无法在官方文档中找到任何内容。 TIA.
您可以使用加注表达式(参见 here),如下例所示。
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
有没有办法为前置条件和后置条件指定自定义 error/on 失败消息,类比为谓词 Predicate_Failure
?我似乎无法在官方文档中找到任何内容。 TIA.
您可以使用加注表达式(参见 here),如下例所示。
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