我继承了这段代码,无法弄清楚它的作用.定义看起来很简单:
result : BOOLEAN ;
LOOKUP_TABLE : array
( BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN,
BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN, BOOLEAN ) of
BOOLEAN := (others => (others => (others => (others => (others => (others => (others => (others =>
(others => (others => (others => (others => (others => (others => (others => (others =>
TRUE ))))))))))))))));
Run Code Online (Sandbox Code Playgroud)
在体内,使用如下:
result := LOOKUP_TABLE(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE,
FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE );
Run Code Online (Sandbox Code Playgroud)
当在GDB中转储lookup_table时,它会创建一个超过500,000个字符长的行,第一个小点看起来像这样:
$1 = ((((((((((((((((true, true), (true, true)), ((true, true), (true, true))), (((true, true), (true, ...
Run Code Online (Sandbox Code Playgroud)
最初我的问题是:如何将16个布尔数组简化为单个bool"结果"?但是在GDB中查看后,我不得不问"这是什么东西???"
PS:在正文中调用之后,LOOKUP_TABLE仍然是500,000个字符,其中每个布尔字段都为TRUE ...
在Ada中,数组不是必须由从0开始的int索引.在这种情况下,您有多维数组,其中布尔值作为索引.
初始化数组时,必须指定数组的整个范围.
一维数组看起来像这样:
Lookup_Table : array(Boolean) of Boolean := (False..True => True);
在处理较大的数组时,指定所有替代项是不方便的,因此关键字也是如此others.这意味着尚未指定的所有替代方案,因此与上述相同:
Lookup_Table : array(Boolean) of Boolean := (others => True);
此数组现在看起来像这样(1是维度,C是内容):
1 | C
-----|-----
False|True
True |True
Run Code Online (Sandbox Code Playgroud)
在二维数组中,这将是:
Lookup_Table : array(Boolean, Boolean) of Boolean := (others => (others => True));
1 | 2 | C
-----|-----|-----
False|False|True
False|True |True
True |False|True
True |True |True
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它是16维.
您可以在此处阅读有关Ada数组的更多信息