Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перечисляемый тип. [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо