配列の添字にスコープ付き列挙型が使えないバグ。
まず列挙型と配列のおさらい
type TGender = (Male, Female); // これが列挙型 var population: array[TGender] of UInt64; // こうやって添字に指定できる begin population[Male] := 15; population[Female] := 20; end;
列挙型の一部を添字にしたいとき
type TGender = (Unknown, Male, Female); var population: array[Male..Female] of UInt64; // 0..9みたいな感覚で
こういうのを部分範囲型と呼ぶ、ってD6のヘルプが言ってた。えっ、D2010のヘルプ?ごめん何のことかよく分からない。
スコープ付き列挙型
type TGender = (Male, Female); {$SCOPEDENUMS ON} TSex = (Male, Female); {$SCOPEDENUMS OFF} var gender: TGender; sex: TSex; begin gender := TGender.Male; // 型を付けて限定できる gender := Male; // つけなくてもいい sex := TSex.Female; // SCOPEDENUMSがONの時は型が必須になる sex := Female; // エラー end.
スコープ付き列挙型で一部の範囲を添字にしたい
var hoge: array[TGender.Male..TGender.Female] of Integer;
[エラー] Unit1.pas(7): E2029 ']' が必要な場所に '.' があります
どう見てもバグェ…
何とかしてよコードギアえもーん!