Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.18;
Скачать: CL | DM;

Вниз

Перечисляемый тип.   Найти похожие ветки 

 
AleKo   (2007-10-23 08:36) [0]

Добрый день.
Наверно детский вопрос.

Имеются константы типа Char

Const1 = ‘0’
Const2 = ‘1’
Const3 = ‘+’

Как объявить тип, переменная которого принимала бы одно из значений Const1 или  Const2 или Const3.


 
Palladin ©   (2007-10-23 08:54) [1]

c:char


 
Reindeer Moss Eater ©   (2007-10-23 09:02) [2]

type tmytype = (const1,const2,const3);

только константы надо объявить действительно как char, а не string, как у тебя.


 
AleKo   (2007-10-23 09:04) [3]

[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"


 
AleKo   (2007-10-23 09:15) [4]

Const
  epNotEnter    : Char = "0";
   epNotEnter2   : Char = " ";
   epAlwaysEnter : Char   = "1";
   epInherited   : Char  = "2";
   epInheritedAndAlwaysEnter : Char = "3";

type
   TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);

Если так, то не работает.


 
Reindeer Moss Eater ©   (2007-10-23 09:24) [5]

Тогда просто перечислимый тип + функция трансляции членов в символы


 
AleKo   (2007-10-23 09:31) [6]


> Тогда просто перечислимый тип + функция трансляции членов
> в символы


Это понятно.
Хочется определит значения в одном месте и пользоваться.

Я хотел для читаемости кода назвать константы исходя из их значений, так как "0" или "1" это не информативно.


 
Reindeer Moss Eater ©   (2007-10-23 09:32) [7]

Ну так в чем проблемы?
В коде будут символические константы нового типа.
А когда нужны будут символы, вызывай функцию.


 
AleKo   (2007-10-23 09:40) [8]

Вы предлагаете так:

type
  TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);

Begin
....
    Функция(Поле) = epNotEnter;
....
end;


 
Reindeer Moss Eater ©   (2007-10-23 09:48) [9]

Я предлагаю просто
type
 TEnterryProp = (epNotEnter,epNotEnter2,epAlwaysEnter,epInherited,epInheritedAndAlwaysEnter);

А в случаях, когда нужен сам символ я предлагаю
function blablabla(AElement : TEnterryProp) : char;
begin
case AElement of
 epNotEnter : result := "1";
 ...
end;
end;


 
Leonid Troyanovsky ©   (2007-10-23 09:50) [10]


> AleKo   (23.10.07 09:40) [8]

const
 EnterryPropValues: array [TEnterryProp] of Char = "0 123";

--
Regards, LVT.


 
AleKo   (2007-10-23 09:57) [11]


> const  EnterryPropValues: array [TEnterryProp] of Char =
> "0 123";


А зачем мне массив, мне массив не нужен, мне перечисляемый тип нужен.


 
Reindeer Moss Eater ©   (2007-10-23 09:58) [12]

этот массив - замена моего кейса


 
Kolan ©   (2007-10-23 09:59) [13]

> Reindeer Moss Eater ©   (23.10.07 09:48)
> Я предлагаю просто

Я тоже голосую за
case AElement of
ёпНеВходить : result := "1";

:)


 
Leonid Troyanovsky ©   (2007-10-23 10:08) [14]


> AleKo   (23.10.07 09:57) [11]

> А зачем мне массив, мне массив не нужен, мне перечисляемый
> тип нужен.

TEnterryProp - перечислимый тип.
Определись, чего ты хочешь.

--
Regards, LVT.


 
AleKo   (2007-10-23 10:28) [15]

Я хотел определить тип который позволит мне делать так

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.


 
Reindeer Moss Eater ©   (2007-10-23 10:31) [16]

тебе все уже подсказали.

Контролировать Variable и не допустить присвоение например "9".  

не использовать в коде литералы и не допустить присвоения "9" символьному типу - это две совершенно разные вещи.


 
Сусл ©   (2007-10-23 10:57) [17]

2автар, я думаю, что решить задачу именно как хочешь ты незя.


 
Palladin ©   (2007-10-23 16:32) [18]

вот вот, незя, потому и char, а контроль над содержимым char полностью лежит на программисте


 
имя   (2007-10-28 01:40) [19]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2007.11.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
2-1193076754
NiGGa
2007-10-22 22:12
2007.11.18
private свойства


2-1193141803
Azize
2007-10-23 16:16
2007.11.18
StringGrid


2-1192578159
qaswet
2007-10-17 03:42
2007.11.18
Фильтр по подстроке


15-1191982209
Slider007
2007-10-10 06:10
2007.11.18
С днем рождения ! 10 октября 2007 среда


2-1193313998
DimOk
2007-10-25 16:06
2007.11.18
Удаление файла