【问题标题】:Integer to custom type conversion in AdaAda 中的整数到自定义类型转换
【发布时间】:2015-05-14 19:43:32
【问题描述】:

我有一个由某种类型的对象组成的数组,由 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 索引的,它们是不同的类型。

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

【问题讨论】:

  • 您是在问如何进行类型转换?简单,Index(i)。但是,您可以将Character 直接转换为IndexIndex'Value(s)
  • 你可能想get一个字符串而不是一个字符,因为使用这个算法的字符只会让你得到table的前9个元素。

标签: indexing types integer type-conversion ada


【解决方案1】:
type index is new Integer range 1..50;
type table is new Array(index) of expression;

table 的声明中不需要(也不能有)new 关键字。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多