2015-05-14 19 views
0

自定義類型轉換我有某種對象的數組,一個類型index索引:整數在阿達

type index is new Integer range 1..50; 
type table is new Array(index) of expression; 

現在,我需要訪問這些表達式之一,這取決於用戶進入鍵盤。對於我以下:

c: Character; 
get(c); 

s: String := " "; 
s(1) := c; 

最後,我可以投的字符鍵入Integer

i: Integer; 
i := Integer'Value(s); 

現在,我有用戶要訪問的值的位置,但ADA不讓您訪問table,因爲它是由index索引而不是Integer,它們是不同的類型。

什麼是最好的解決方案,基於用戶的輸入訪問表達式?

+0

你問如何做一個類型轉換?很簡單,'索引(我)'。但是,您可以直接將'Character'轉換爲'Index':'Index'Value(s)' – egilhh

+1

您可能希望''獲取'一個字符串而不是一個字符,因爲在此算法中使用字符只會讓您獲得在'表'的前9個元素。 –

回答

6
type index is new Integer range 1..50; 
type table is new Array(index) of expression; 

你並不需要(也不可能有)中的table聲明的new關鍵字。

S: String := (1 => C); 

(假設C是可見的,並在其中S被聲明的點初始化):

c: Character; 
get(c); 

s: String := " "; 
s(1) := c; 

最後兩行可以如寫入。

i: Integer; 
i := Integer'Value(s); 

這不是「演員」。阿達沒有演員。這甚至不是一種類型轉換。但我明白你的意思;如果C = '4',則S = "4"Integer'Value(S) = 4。 (你應該想想該怎麼辦如果C值不是一個小數位數,這將導致Integer'Value(S)提高Constraint_Error

現在,我有用戶要訪問的值的位置,但Ada 不允許您訪問table,因爲它的索引編號爲index 而不是Integer,它們是不同的類型。

簡單:不要使用不同的類型:

I: Index := Index'Value(S);