![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перечисляемый тип. [D7, WinXP]
AleKo © (2007-10-23 08:36:00)Добрый день.
Наверно детский вопрос.
Имеются константы типа Char
Const1 = ‘0’
Const2 = ‘1’
Const3 = ‘+’
Как объявить тип, переменная которого принимала бы одно из значений Const1 или Const2 или Const3.
(2007-10-28 01:40:00) [1]Удалено модератором
Palladin (2007-10-23 16:32:00) [2]вот вот, незя, потому и char, а контроль над содержимым char полностью лежит на программисте
Сусл (2007-10-23 10:57:00) [3]2автар, я думаю, что решить задачу именно как хочешь ты незя.
Reindeer Moss Eater (2007-10-23 10:31:00) [4]тебе все уже подсказали.
Контролировать Variable и не допустить присвоение например '9'.
не использовать в коде литералы и не допустить присвоения '9' символьному типу - это две совершенно разные вещи.
AleKo (2007-10-23 10:28:00) [5]Я хотел определить тип который позволит мне делать так
Const1 = ‘0’
Const2 = ‘1’
Const3 = ‘+’
Type
NewType = (Const1 или Const2 или Const3)
Var
Variable : NewType;
Variable := Const1;
if Поле = Variable then;
if Поле = Const2 then;
if Variable = Const3 then;
Variable := Поле;
Контролировать Variable и не допустить присвоение например '9'.
Поле типа Char.
Leonid Troyanovsky (2007-10-23 10:08:00) [6]
> AleKo (23.10.07 09:57) [11]
> А зачем мне массив, мне массив не нужен, мне перечисляемый
> тип нужен.
TEnterryProp - перечислимый тип.
Определись, чего ты хочешь.
--
Regards, LVT.
Kolan (2007-10-23 09:59:00) [7]> Reindeer Moss Eater © (23.10.07 09:48)
> Я предлагаю просто
Я тоже голосую за
case AElement of
ёпНеВходить : result := '1';
:)
Reindeer Moss Eater (2007-10-23 09:58:00) [8]этот массив - замена моего кейса
AleKo (2007-10-23 09:57:00) [9]
> const EnterryPropValues: array [TEnterryProp] of Char =
> '0 123';
А зачем мне массив, мне массив не нужен, мне перечисляемый тип нужен.
Leonid Troyanovsky (2007-10-23 09:50:00) [10]
> AleKo (23.10.07 09:40) [8]
const
EnterryPropValues: array [TEnterryProp] of Char = '0 123';
--
Regards, LVT.
Reindeer Moss Eater (2007-10-23 09:48:00) [11]Я предлагаю просто
type
TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);
А в случаях, когда нужен сам символ я предлагаю
function blablabla(AElement : TEnterryProp) : char;
begin
case AElement of
epNotEnter : result := '1';
...
end;
end;
AleKo (2007-10-23 09:40:00) [12]Вы предлагаете так:
type
TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);
Begin
....
Функция(Поле) = epNotEnter;
....
end;
Reindeer Moss Eater (2007-10-23 09:32:00) [13]Ну так в чем проблемы?
В коде будут символические константы нового типа.
А когда нужны будут символы, вызывай функцию.
AleKo (2007-10-23 09:31:00) [14]
> Тогда просто перечислимый тип + функция трансляции членов
> в символы
Это понятно.
Хочется определит значения в одном месте и пользоваться.
Я хотел для читаемости кода назвать константы исходя из их значений, так как "0" или "1" это не информативно.
Reindeer Moss Eater (2007-10-23 09:24:00) [15]Тогда просто перечислимый тип + функция трансляции членов в символы
AleKo (2007-10-23 09:15:00) [16]Const
epNotEnter : Char = '0';
epNotEnter2 : Char = ' ';
epAlwaysEnter : Char = '1';
epInherited : Char = '2';
epInheritedAndAlwaysEnter : Char = '3';
type
TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);
Если так, то не работает.
AleKo (2007-10-23 09:04:00) [17][Pascal Error] Unit1.pas(28): E2004 Identifier redeclared: 'epNotEnter'
[Pascal Error] Unit1.pas(28): E2004 Identifier redeclared: 'epNotEnter2'
[Pascal Error] Unit1.pas(28): E2004 Identifier redeclared: 'epAlwaysEnter'
[Pascal Error] Unit1.pas(28): E2004 Identifier redeclared: 'epInherited'
Reindeer Moss Eater (2007-10-23 09:02:00) [18]type tmytype = (const1,const2,const3);
только константы надо объявить действительно как char, а не string, как у тебя.
Palladin (2007-10-23 08:54:00) [19]c:char