delphi 定义一个混合静态和动态元素的 const 多维数组
delphi defining a const multidimensional arrays with mixed static and dynamic elements
是否可以在创建多维数组时混合使用静态和动态数组,然后使用它来定义该类型的常量。
编译器似乎没有以下问题,所以我认为像这样混合动态和静态数组是合法的...
TSoftKeyBase = (skEmptyCommandLine, skChannelsSelected);
TSoftKeySet = array of array of String;
TSoftKeys = array[TSoftKeyBase] of TSoftKeySet;
当我尝试为这个数组定义一个 const 时,我总是在元素的内部列表上得到 "Ordinal type required"。我是否超越了语言的范围?
const
SOFT_KEYS: TSoftKeys =
[
[
['Select Previous', 'Page', 'Close', 'SC', 'Park', 'MORE >'],
['Output', 'FX', 'Macro', 'Select Active', 'Select Changed', 'MORE >'],
['Cue List', 'Re Cue List', 'Load', 'Inclusive Mode', 'Active Sel Mode', 'MORE >'],
['If', 'View', 'Scroll To', '', '', 'MORE >']
],
[
['Select Previous', 'Last', 'Next', 'Clear Selection','Park', 'MORE >'],
['Down %', 'Up %', 'Home', 'Select Active', 'Select Changed', 'MORE >'],
['Virtual DSC', 'HiLight', 'LoLight', 'Fan', 'Offset', 'MORE >'],
['', '', '', '', '@ ATTs', 'MORE >']
]
];
您需要在最外层使用普通括号 (array[TSoftKeyBase]
),因为它是静态数组(而不是动态数组或集合)。
const
SOFT_KEYS: TSoftKeys =
(
[
['Select Previous', 'Page', 'Close', 'SC', 'Park', 'MORE >'],
['Output', 'FX', 'Macro', 'Select Active', 'Select Changed', 'MORE >'],
['Cue List', 'Re Cue List', 'Load', 'Inclusive Mode', 'Active Sel Mode', 'MORE >'],
['If', 'View', 'Scroll To', '', '', 'MORE >']
],
[
['Select Previous', 'Last', 'Next', 'Clear Selection','Park', 'MORE >'],
['Down %', 'Up %', 'Home', 'Select Active', 'Select Changed', 'MORE >'],
['Virtual DSC', 'HiLight', 'LoLight', 'Fan', 'Offset', 'MORE >'],
['', '', '', '', '@ ATTs', 'MORE >']
]
);
更简单的示例:
type
TTest = array[0..2] of Integer; // static array
const
Data: TTest = (10, 20, 30);
和
type
TTest = array of Integer; // dynamic array
const
Data: TTest = [10, 20, 30];
和
type
TTest = set of Byte; // set
const
Data: TTest = [10, 20, 30];
是否可以在创建多维数组时混合使用静态和动态数组,然后使用它来定义该类型的常量。 编译器似乎没有以下问题,所以我认为像这样混合动态和静态数组是合法的...
TSoftKeyBase = (skEmptyCommandLine, skChannelsSelected);
TSoftKeySet = array of array of String;
TSoftKeys = array[TSoftKeyBase] of TSoftKeySet;
当我尝试为这个数组定义一个 const 时,我总是在元素的内部列表上得到 "Ordinal type required"。我是否超越了语言的范围?
const
SOFT_KEYS: TSoftKeys =
[
[
['Select Previous', 'Page', 'Close', 'SC', 'Park', 'MORE >'],
['Output', 'FX', 'Macro', 'Select Active', 'Select Changed', 'MORE >'],
['Cue List', 'Re Cue List', 'Load', 'Inclusive Mode', 'Active Sel Mode', 'MORE >'],
['If', 'View', 'Scroll To', '', '', 'MORE >']
],
[
['Select Previous', 'Last', 'Next', 'Clear Selection','Park', 'MORE >'],
['Down %', 'Up %', 'Home', 'Select Active', 'Select Changed', 'MORE >'],
['Virtual DSC', 'HiLight', 'LoLight', 'Fan', 'Offset', 'MORE >'],
['', '', '', '', '@ ATTs', 'MORE >']
]
];
您需要在最外层使用普通括号 (array[TSoftKeyBase]
),因为它是静态数组(而不是动态数组或集合)。
const
SOFT_KEYS: TSoftKeys =
(
[
['Select Previous', 'Page', 'Close', 'SC', 'Park', 'MORE >'],
['Output', 'FX', 'Macro', 'Select Active', 'Select Changed', 'MORE >'],
['Cue List', 'Re Cue List', 'Load', 'Inclusive Mode', 'Active Sel Mode', 'MORE >'],
['If', 'View', 'Scroll To', '', '', 'MORE >']
],
[
['Select Previous', 'Last', 'Next', 'Clear Selection','Park', 'MORE >'],
['Down %', 'Up %', 'Home', 'Select Active', 'Select Changed', 'MORE >'],
['Virtual DSC', 'HiLight', 'LoLight', 'Fan', 'Offset', 'MORE >'],
['', '', '', '', '@ ATTs', 'MORE >']
]
);
更简单的示例:
type
TTest = array[0..2] of Integer; // static array
const
Data: TTest = (10, 20, 30);
和
type
TTest = array of Integer; // dynamic array
const
Data: TTest = [10, 20, 30];
和
type
TTest = set of Byte; // set
const
Data: TTest = [10, 20, 30];