我希望能够为GTK ComboBox声明一个固定长度字符串的常量数组 . 是否可以在ADA中使用两个参数?
此代码允许通过声明字符串来设置数组的大小 . 是否有可能以某种方式用参数替换规范中的常量?
一个简单的数组不允许判别 . 判别式记录不允许匿名数组 .
编辑:
我可以以某种方式声明与表单等效的类型:
type StringOfStrings(sringlength:positive; arraysize:positive)array(1..arraysize)of string(1..stringlength);
这种形式是不可能的,因为数组不能有判别式 .
要么
子类型SelectorString是字符串;
type SelectorStringArray(arraysize:positive; stringlength:positive)是记录stringarray:SelectorString的数组(1..arraysize)(1..stringlength);结束记录;
此表单是不可能的,因为记录不能具有匿名数组 .
回答:
以下作品,
包Selectors.Strings是
子类型ArrayIndex是正范围1..64; - ComboBox中的最大条目
子类型TextIndex是正范围1..32; - 最大入场时间
type SelectorStringArray是字符的数组(arrayindex range <>,textindex range <>);
function StringSelector(stringarray:SelectorStringArray)return ArrayIndex;
sel:SelectorStringArray:=(“aa”,“bb”,“cc”,“dd”);
结束选择器 . 字符串;
sel中的字符串必须都是相同的长度 .
谢谢,
老工程师
package Selectors.Strings is
SelectorStringLength : constant := 2;
subtype SelectorString is string( 1..SelectorStringLength );
type SelectorStringArray is array( positive range <> ) of SelectorString;
subtype SelectorStringIndex is positive;
function StringSelector( stringarray : SelectorStringArray ) return SelectorStringIndex;
selectarray : SelectorStringArray := ( "aa", "bb", "cc", "dd" );
end Selectors.Strings;
1 回答
我正在寻找,但您在上面的代码中没有任何匿名数组,并且您可以使用其组件为命名数组类型的判别式记录类型 . 所以我不确定你的陈述"A discriminant record does not permit an anonymous array"是指什么 .
假设
selectarray
最多可以包含100个字符串:在身体里
然后使用
selectarray.Data
而不是selectarray
来访问数据 .您需要最大数组长度,因为某些编译器将为
Selector_Strings
的Data
组件分配尽可能大的空间 .另一种选择是使
selectarray
成为数组类型的access
.