虽然以下子范围枚举声明有效:
type
TReceiptCode = 'A'..'F';
这不会:
type
TReceiptCode = ' ','A'..'F', 'R';
也没有
type
TReceiptCode = ' ','A','B','C','D','E','F','R';
如何声明具有非连续值的子范围类型?
不幸的是,我认为没有办法做到这一点。您可以声明(新的)非连续枚举,或现有类型的子范围,但不能同时声明两者。
你能用一套来代替吗?
TSomeCharSet= Set of Char;
SomeChars: TSomeCharSet = [' ','A','B','C','D','E','F','R'];
可能是奶奶和鸡蛋的情况,但我不确定你当时用的是什么:) ...
那么剩下的就是使用 Set 或数组作为限制“范围”自己创建 TNonContigousCharRange,并在超出范围或使用 SetReceiptCode 过程执行类似操作时引发异常。
对于所有先前的答案,我会简单地补充一点,线索是类型的名称:子范围
简单地说,一个范围有一个下限和一个上限。您描述的是一个集合(或一个子集),而不是一个子范围,因此您当然不能将其表示为一个子范围。