在Ada中自定义类型转换

时间:2015-05-14 19:43:33

标签: indexing types integer type-conversion ada

我有一个由类型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编入索引,这是不同的类型。

根据用户的输入访问表达式的最佳解决方案是什么?

1 个答案:

答案 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);

(假设CS被声明的位置可见并初始化。

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);