我有一个由类型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 :(得分:6)
type index is new Integer range 1..50;
type table is new Array(index) of expression;
new
声明中您不需要(并且无法拥有)table
关键字。
c: Character;
get(c);
s: String := " ";
s(1) := c;
最后两行可以写成:
S: String := (1 => C);
(假设C
在S
被声明的位置可见并初始化。
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);