下面给出的是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;

08-26 06:29