m4t*_*tti 0 indexing types integer ada type-conversion
我有一个由某种类型索引的某种对象的数组index:
type index is new Integer range 1..50;
type table is new Array(index) of expression;
Run Code Online (Sandbox Code Playgroud)
现在,我需要访问其中一个表达式,具体取决于键盘输入的用户.为此我做了以下事情:
c: Character;
get(c);
s: String := " ";
s(1) := c;
Run Code Online (Sandbox Code Playgroud)
最后我可以将角色转换为Integer:
i: Integer;
i := Integer'Value(s);
Run Code Online (Sandbox Code Playgroud)
现在,我有用户想要访问的值的位置,但Ada不允许您访问table,因为它是由索引编制index而不是Integer,它们是不同的类型.
根据用户的输入访问表达式的最佳解决方案是什么?
type index is new Integer range 1..50;
type table is new Array(index) of expression;
Run Code Online (Sandbox Code Playgroud)
您不需要(也不能拥有)new声明中的关键字table.
c: Character;
get(c);
s: String := " ";
s(1) := c;
Run Code Online (Sandbox Code Playgroud)
最后两行可写为:
S: String := (1 => C);
Run Code Online (Sandbox Code Playgroud)
(假设C在S声明的点处可见并初始化).
i: Integer;
i := Integer'Value(s);
Run Code Online (Sandbox Code Playgroud)
这不是"演员".阿达没有演员阵容.它甚至不是类型转换.但我理解你的意思; if C = '4',then S = "4",and Integer'Value(S) = 4.(如果值C不是十进制数字,您应该考虑该怎么做;这将导致Integer'Value(S)提高Constraint_Error.)
现在,我有用户想要访问的值的位置,但Ada不允许您访问
table,因为它是由索引编制index而不是Integer,它们是不同的类型.
简单:不要使用不同的类型:
I: Index := Index'Value(S);
Run Code Online (Sandbox Code Playgroud)