Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
Внизмножества Найти похожие ветки
← →
unreger (2003-04-29 08:43) [0]type
TSProgrammStateOK = (ps_Neutral=0, ps_OK=1, ps_Warning=2);
TSProgrammStatesOK = set of TSProgrammStateOK;
TSProgrammStateError = (ps_Error=3, ps_Critical=4);
TSProgrammStatesError = set of TSProgrammStateError;
Надо объявить что-то вроде
TSProgrammState = TSProgrammStateOK+TSProgrammStateError (объединение)
Только не соображу как это сделать.
Хочется
if CurrentState in TSProgrammStatesOK then ....
где CurrentState типа TSProgrammState
← →
Goffman (2003-04-29 08:57) [1]Можно объявить ps_Neutral, ps_OK итд константами
а множества объявлять так
TSProgrammStatesOK=set of ps_Neutral..ps_Warning;
TSProgrammStatesError = set of ps_Error..ps_Critical;
TSProgrammState=set of byte;
Надеюсь смысл ясен
← →
unreger (2003-04-29 09:42) [2]То что надо!
Спасибо.
← →
evvcom (2003-04-29 09:55) [3]Или так:
type
TSProgrammState = (ps_Neutral, ps_OK, ps_Warning, ps_Error, ps_Critical);
TSProgrammStateOK = (ps_Neutral..ps_Warning);
TSProgrammStateError = (ps_Error..ps_Critical);
TSProgrammStates = set of TSProgrammState;
TSProgrammStatesOK = set of TSProgrammStateOK;
TSProgrammStatesError = set of TSProgrammStateError;
← →
Goffman (2003-04-29 10:01) [4]
> evvcom © (29.04.03 09:55)
А скомпилировать пробовал :)
← →
evvcom (2003-04-29 10:04) [5]> Goffman © (29.04.03 10:01)
Сейчас нет. А вообще что-то типа этого я уже делал.
Сорьки! Надо без скобок:
TSProgrammStateOK = ps_Neutral..ps_Warning;
TSProgrammStateError = ps_Error..ps_Critical;
← →
Goffman (2003-04-29 10:09) [6]Выдаст Undeclared Identifier
← →
han_malign (2003-04-29 10:34) [7]Извращенцы
type
TSProgrammState = (ps_Neutral, ps_OK, ps_Warning, ps_Error, ps_Critical);
const
cSProgrammStateOk = [ps_Neutral..ps_Warning];
cSPragrammStateError = [ps_Error..ps_Critical];
- намного корректней просто объявить константы подмножеств и проверять вхождение в них, тем более, что в более сложных случаях можно комбинировать эти подмножества операциями объединения, пересечения, et cetera...
← →
unreger (2003-04-29 11:34) [8]Константы подмножеств - вот оно, нужное слово.
Только
TSProgrammState = (ps_Neutral=0,ps_OK=1,ps_Warning=2,ps_Error=3,ps_Critical=4);
т.к. надо обращаться к элементам массива.
← →
evvcom (2003-04-29 12:37) [9]Можно массив описать:
type TMyArray = array[TSProgrammState] of <AnyType>;
и обращатьсяMyArray[SProgrammState]
Если же все-таки тип индексов массива целочисленный, то так:
MyArray[Integer(SProgrammState)]
но первый вариант мне гораздо больше нравится.
← →
evvcom (2003-04-29 12:40) [10]Это к тому, что
TSProgrammState = (ps_Neutral=0,ps_OK=1,ps_Warning=2,ps_Error=3,ps_Critical=4);
имеет недостаток. Если вдруг захочешь в этот тип куда-нибудь в середину добавить еще какое-нибудь значение, а суммарное их количество достаточно велико, то придется вручную довольно много править. Поэтому увеличивается вероятность ошибки порой даже трудно уловимую.
← →
unreger (2003-04-29 12:45) [11]MyArray[Integer(SProgrammState)]
это все внутри класса и сделал private property, которое возвращает
Integer(от текущего ProgrammState) :)
← →
unreger (2003-04-29 13:00) [12]evvcom © (29.04.03 12:40)
вряд ли потребуется расширять можество, но подумал и, пожалуй,
соглашусь с первым способом
type TMyArray = array[TSProgrammState] of <AnyType>;
← →
evvcom (2003-04-29 14:04) [13]> это все внутри класса и сделал private property
Ничего не мешает реализовывать эту идею и внутри класса. Преобразования типов Integer(TOrdinalType) и TOrdinalType(Integer) добавляют дополнительные символы в текст программы, но не добавляют ничего в результирующий код, поэтому можно этого не бояться.
> которое возвращает Integer(от текущего ProgrammState)
Да и возвращал бы я все же TSProgrammState...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c