将类型声明为集合的子集

Declaring a type as a subset of a set

我可以很容易地声明一个枚举和一个集合。
但有时我只想使用枚举的一部分,我希望编译器为我检查子枚举及其子集中的值是否在范围内。

type
  TDay = (mon, tue, wen, thu, fri, sat, sun);
  TWeekday = (mon..fri); //not allowed;

  TDays = set of TDay;
  TWeekdays = set of TDay[mon..fri]; //not allowed

我可以将 TWeekdayTWeekdays 声明为 TDay 的派生词吗?如果可以,如何声明?

足够有趣 google 在这个问题上(对我而言)没有产生任何结果,只是普通的旧集。

您对子范围的语法有误。去掉括号 () 即可。

type
  TDay = (mon, tue, wen, thu, fri, sat, sun);
  TWeekday = mon..fri; // A subrange of TDay

  TDays = set of TDay;
  TWeekdays = set of TWeekDay; 

更多关于Subrange Types and Sets