Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как в разделе const заставить работать ф-ции


Автор: Delphist 25.9.2008, 10:47
Скажите, пожалуйста, можно ли как-нить в разделе const, делать вещи типа:
Код

const
  MAX_NUM = 200;
  FLD_ = '_';
  MyConst = FLD_ + IntToStr(MY_NUM);

Автор: Poseidon 25.9.2008, 10:51
Чот не понятно зачем? Ну делай так и не выдумывай себе проблем:
Код

const
  MyConst = '_200';

правда там у тя MAX_NUM и MY_NUM. Но, думаю, это ты просто опечатался...

Автор: Delphist 25.9.2008, 11:11
Цитата(Poseidon @  25.9.2008,  11:51 Найти цитируемый пост)
Чот не понятно зачем? Ну делай так и не выдумывай себе проблем:

Согласен, пример мой слишком надуманный по этому ценности особо не представляет, объясню на более конкретном примере, у меня есть несколько констант ID1, ID2, ID3
и по коду во многих местах встречается такая фигня
Код

if (FieldName = FLD_+IntToStr(ID1)) or (FieldName = FLD_+IntToStr(ID2)) then
...

а хотелось бы
Код

const
 fnID1 = FLD_+IntToStr(ID1);
 fnID2 = FLD_+IntToStr(ID2);
...
if (FieldName = fnID1) or (FieldName = fnID2) then
...

Конечно, можно было бы просто для ID1, ID2,... создать еще и их string'и
Код

const
 s_ID1 = '1';
 s_ID2 = '209'

 fnID1 = FLD_+s_ID1;
 fnID2 = FLD_+s_ID2;

но этот способ меня не устраивает.


Автор: Rennigth 25.9.2008, 11:29
Никак. и правильно...

Автор: CodeMonkey 25.9.2008, 11:32
Цитата(Delphist @  25.9.2008,  11:11 Найти цитируемый пост)
а хотелось бы

http://thedailywtf.com/Articles/Constantly-Expanding.aspx идёте, товарищ smile  

Автор: Delphist 25.9.2008, 11:40
Цитата(CodeMonkey @  25.9.2008,  12:32 Найти цитируемый пост)
Опасным путём идёте, товарищ

А причем здесь ваща статейка, ты думаешь я ошибусь в значении переменной? Мне просто нужно как-то заставить работать мою идею в разделе const

Автор: Poseidon 25.9.2008, 12:16
Цитата(Delphist @  25.9.2008,  11:11 Найти цитируемый пост)
Конечно, можно было бы просто для ID1, ID2,... создать еще и их string'и
Что-то мне кажется, что в приведенном выше коде константы  fnID1 и fnID2 как раз "их string'и". Т.е. вместо приведенного "хочу так":

Код

const
 fnID1 = FLD_+IntToStr(ID1);
 fnID2 = FLD_+IntToStr(ID2);
...
if (FieldName = fnID1) or (FieldName = fnID2) then
...


делаем так:
Код

const
ID1 = 1; // предположим
ID2 = 2; // тоже предположим
FLD_ = '_' ; // ну не знаю что у тя там

fnID1 = '_1';
fnID2 = '_2';
...
if (FieldName = fnID1) or (FieldName = fnID2) then
...


имеем те же самые "новые" константы fnID1 и fnID2 в которых у нас то, что надо.

Автор: Snowy 25.9.2008, 12:18
Не будут функции "работать" в разделе const.
Есть ограниченный набор системных функций, которые компилятор знает лично и может их выполнить на этапе компиляции.
Но все эти функции находятся в system. И их немного.
Все процие функции компилятор выполнять не станет - они работают только в процессе выполнения программы.
Поэтому просто создай переменную и задай ей значение на этапе инициализации программы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)