Ada中的以下源代码行,
type Airplane_ID is range 1..10;
,可以写成
type Airplane_ID is range 1..x;
,其中x是变量?我问这个是因为我想知道是否可以修改x的值,例如通过文本输入。提前谢谢。
答案 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;