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

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

Определить тип данных [D7]


Страницы:   1 2 3 4

Сергей ©   (2014-03-25 11:06:00) 

Var I:int64; B:Byte;W:word;
Procedure Proc1(e:int64); Begin {код}end;
Можно ли определить в коде самой процедуре что ей передаётся т.е. чиловое значение Proc1(34) или переменная какого типа Proc1(b);Proc1(w);Proc1(I);? Как это сделать ?


Сергей   (2014-03-25 23:13:00) [1]

Sha, СПАСИБО!
Хм... неужели всё так просто, т.е. дописуй к процедуре overload; и всё будет в порядке!


Sha   (2014-03-25 22:43:00) [2]

"Overload" F1 "Overloading procedures and functions"


Сергей   (2014-03-25 22:35:00) [3]

Да всё уже! - Не нужно! Спасибо! Тема закрыта.
Я уже свои мысли перестроил! т. е. действительно верно было сказано, что разные типы данных нужно и «толкать» разным процедурам, а не в смесь в одну! тем более не так уж их и много процедур которые надо будет переделывать, да и не сложно . А с этим проблем нет.
В будущем понадобится разобраться с конструкторами если можно киньте ссылку на простейший пример. т. е. нужно будет Proc1 использовать как Proc1(a:int64); Proc1(a,b:int64); Proc1(a,b,c:int64);
т.е. Чтобы одну процедуру можно было использовать с разным количеством одинаковых параметров. Такое сложно сделать ? Через конструктор как-то ?


Sha   (2014-03-25 21:00:00) [4]

опиши задачу на уровень выше, что надо сделать, а не то как ты это делаешь


Сергей   (2014-03-25 18:00:00) [5]

Всем спасибо за внимание и участие. Но это всё не ТО что нужно. У меня всё работает нормально и всё процедуры,а их более 200 построены на этом. Беда только в том что переменной забываешь делать GetID(Val) чтобы ей Val присваивался уникальный ИД в (нужном диапазоне) и получаешь "коварный удар", что процедуры её воспринимают как число, как ноль и нет разницы между переменными Val1 и Val2 если они равны нулю. Да и как я вас понял, понять, что это не ноль, а переменная тоже невозможно. Надоело получать такие "удары". Я думал может это как-то можно решить т.е. так как хотелося-бы.
Еще раз всем спасибо за внимание.


Inovet   (2014-03-25 17:40:00) [6]

> [64] Сергей   (25.03.14 17:26)

Не надо разные сущности через одну дырку в процедуру пропускать а вней потом определять что там пришло.

Должны быть вместе ID : TMyID и Val : Int64 к нему привязанное - делай класс с двумя такими полями, может, и рекорд хватит. Его и передавай в процедуру. О чём тебе всю ветку с разных сторон пытаются объяснить. Всё, ничего постороннего в процедуру не попадёт, а непротиворечивость ID и Val отслеживай в самом классе. А может окажется, что и этой обсуждаемой процедуре самое место в этом самом классе.


RWolf   (2014-03-25 17:35:00) [7]

в [2] ответ прозвучал уже.


Сергей   (2014-03-25 17:26:00) [8]

Ega23, причина размечания в том, что каждая переменная должна быть как метка (на таблицу) и каждая из процедур Proc1, Proc2 и т.д. должна принимать числовое значение и метку,  а также "понимать", что  это числовое значение или метка. И вот если сделать Var a, b:int64; и забыть присвоить им уникальный ИД, (нужного диапазона) запустить в Proc1,Proc2 и т.д. то процедуры не будут видеть разницу между a и b и "0". Вот почему я изначально задал вопрос: Можно ли прицедуре понимать что это Int64, а не просто числовое значение.
Type TlvLabel=Class ID:int64;end; Var A:TlvLabel - идея хорошая! тем более,что случано не присвоишь A:=234; - Это очень даже к стати! Но теперь вопрос как добиться что-бы в процедуру можно было "заганять" TlvLabel и числовые значения ? а внутри процедур определять  мол это TlvLabel или просто число.


clickmaker   (2014-03-25 15:23:00) [9]

да уже практически всё было
- variant
- tobject
- max, min
Осталось предложить индусский народный метод: переводить число в строку и проверять длину


Ega23   (2014-03-25 15:16:00) [10]


> я так понял топикстартера, что это банально переменная,
> которой никто ничего не присвоил. Решение в лоб — Variant.


Было уже. Он чего-то другого хочет.


RWolf   (2014-03-25 15:13:00) [11]


> [60]

я так понял топикстартера, что это банально переменная, которой никто ничего не присвоил. Решение в лоб — Variant.


Ega23   (2014-03-25 15:04:00) [12]


> Ega23,
> Так... :-) Первый шаг сделан: TMyInt64 = record    ID: Int64;
>    end; размечаем глобально.
> Нужно сделать процедуру Proc1 (а таких процедур будет не
> одна) которая будет “хавать” обычные числа и данные типа
> TmyInt64! внутри Proc1  чтобы можно было разобраться - это
> данные  типа TmyInt64 или это другие данные (числовые других
> переменных, (не особо важно))
> Вот так теперь стоит вопрос.


Нет. Вопрос стоит не так. Это - твоёвидение решения некой задачи. Следствие, так сказать.
Я же тебя спрашивал про задачу. Какова причина "размечания"?


brother   (2014-03-25 14:52:00) [13]

> процедура «хавала»

я думал разговор там про пипл... а тут (


Сергей   (2014-03-25 14:43:00) [14]

Причем тут извращения...
Можно ли сделать чтобы процедура «хавала» данные (числовые) и типы мной созданные ? А внутри процедуры их отличать ?


Inovet   (2014-03-25 14:41:00) [15]

> [56] MBo ©   (25.03.14 14:39)
> Про проблему X-Y-Z уже вспоминали?

А то. В самом начале ещё.


MBo   (2014-03-25 14:39:00) [16]

Про проблему X-Y-Z уже вспоминали?


clickmaker   (2014-03-25 14:38:00) [17]

> только число оно "хавать" не хочет

ну сделай боксинг, если уж знаешь толк в извращениях
Proc1(TObject(2333));


Jeer   (2014-03-25 14:35:00) [18]

>дак шож делать :-)

Брось дурью маяться - есть места на замену гастарбайтеров.
Адресок могу подсказать.


Сергей   (2014-03-25 14:27:00) [19]

brother, ну раз так получается...    дак шож делать :-)


brother   (2014-03-25 14:21:00) [20]

те с миру по нитке и накодишь?


Страницы:   1 2 3 4

Наверх

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