关于Ada的“范围”

时间:2011-12-10 02:18:46

标签: ada

Ada中的以下源代码行,

type Airplane_ID is range 1..10;

,可以写成

type Airplane_ID is range 1..x;

,其中x是变量?我问这个是因为我想知道是否可以修改x的值,例如通过文本输入。提前谢谢。

4 个答案:

答案 0 :(得分:9)

不,范围的界限都必须是静态表达式。

但是你可以用动态边界声明一个子类型:

X: Integer := some_value;
subtype Dynamic_Subtype is Integer range 1 .. X;

答案 1 :(得分:3)

没有。 Ada范围声明必须是常量。

答案 2 :(得分:3)

  

可以在x为a的地方写type Airplane_ID is range 1..x;   变量?我问这个是因为我想知道x的值是否可以   修改,例如通过文本输入。

我认为你的意思是改变x的值会以动态的方式改变范围本身;如果是这样,那么严格来说,不......但这不完全是答案。

您可以这样做:

Procedure Test( X: In Positive; Sum: Out Natural ) is
  subtype Test_type is Natural Range 1..X;
  Result : Natural:= Natural'First;
 begin
   For Index in Test_type'range loop
     Result:= Result + Index;
   end loop;

   Sum:= Result;
 end Test;

答案 3 :(得分:0)

正如其他答案所提到的那样,您可以按照自己想要的方式声明范围,只要它们在某种块中声明即可 - 声明'块,或程序或功能;例如:

with Ada.Text_IO,Ada.Integer_Text_IO;
use Ada.Text_IO,Ada.Integer_Text_IO;

procedure P is
   l : Positive;
begin
   Put( "l =" ); 
   Get( l );
   declare
      type R is new Integer range 1 .. l;
      i : R;
   begin
      i := R'First;
      -- and so on
   end;
end P;