下面给出的是ada中的一些代码
with TYPE_VECT_B; use TYPE_VECT_B;
Package TEST01 is
procedure TEST01
( In_State : IN VECT_B ;
Out_State : IN OUT VECT_B );
function TEST02
( In_State : IN VECT_B ) return Boolean ;
end TEST01;
TYPE_VECT_B包规范和主体也在下面定义
Package TYPE_VECT_B is
type VECT_B is array (INTEGER range <>) OF BOOLEAN ;
rounded_data : float ;
count : integer ;
trace : integer ;
end TYPE_VECT_B;
Package BODY TYPE_VECT_B is
begin
null;
end TYPE_VECT_B;
变量In_State和Out_State到底是什么意思?我认为In_State表示输入变量。我只是对Out_State的实际含义感到困惑?
最佳答案
子程序可以读取但不能写入in
参数。 in
是默认值。在Ada 2012之前,仅允许函数具有in
参数。实际参数是一个表达式。out
参数表示先前的值无关紧要。子程序应写入参数。写入参数后,子程序可以读回已写入的内容。退出时,实际参数将接收写入的值(该区域存在复杂性!)。实际参数必须是变量。in out
参数与out
参数类似,不同之处在于前一个值值得关注,并且可以在分配前由子程序读取。例如,
procedure Add (V : Integer; To : in out Integer; Limited_To : Integer)
is
begin
-- Check that the result wont be too large. This involves reading
-- the initial value of the 'in out' parameter To, which would be
-- wrong if To was a mere 'out' parameter (it would be
-- uninitialized).
if To + V > Limited_To then
To := Limited_To;
else
To := To + V;
end if;
end Add;