在阿達下面的源代碼行 「範圍」,關於在阿達
type Airplane_ID is range 1..10;
,可以寫爲
type Airplane_ID is range 1..x;
,其中x是變量?我問這是因爲我想知道x的值是否可以修改,例如通過文本輸入。提前致謝。
在阿達下面的源代碼行 「範圍」,關於在阿達
type Airplane_ID is range 1..10;
,可以寫爲
type Airplane_ID is range 1..x;
,其中x是變量?我問這是因爲我想知道x的值是否可以修改,例如通過文本輸入。提前致謝。
否。一個Ada範圍聲明必須是常量。
不,範圍的邊界都必須是靜態表達式。
但是你可以聲明動態範圍的子類型:
X: Integer := some_value;
subtype Dynamic_Subtype is Integer range 1 .. X;
非常感謝。但是在你所舉的例子中,X的值可以通過文本輸入來修改,或者它應該是常量? –
子類型聲明中的邊界可以是任意的表達式,只要它們是適當的類型即可。 –
@ Shark8的回答很好。當你像上面那樣聲明'Dynamic_Subtype'時,'X'在評估聲明時被評估。稍後修改'X'不會影響子類型。 –
可以
type Airplane_ID is range 1..x;
被寫入其中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;
使用上面的代碼,可以通過X參數將Test_type設置爲合適的範圍。 – Shark8
至於其他的答案已經提到的,你可以在你想要的方式申報的範圍,只要在聲明中某種塊 - 一個「聲明'阻止或程序或功能;例如:
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;
非常感謝。 –