首页 > 解决方案 > delphi 定义具有混合静态和动态元素的 const 多维数组

问题描述

在创建多维数组时是否可以混合静态和动态数组,然后使用它来定义该类型的 const。编译器似乎没有以下问题,所以我认为像这样混合动态和静态数组是合法的......

TSoftKeyBase = (skEmptyCommandLine, skChannelsSelected);
TSoftKeySet = array of array of String;
TSoftKeys = array[TSoftKeyBase] of TSoftKeySet;

当我尝试为这个数组定义一个常量时,我​​不断在元素的内部列表中获得“需要序数类型”。我是否超出了语言的范围?

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 >']
        ]
      ];

标签: delphipascal

解决方案


您需要在最外层 ( 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];

推荐阅读