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 14:20:00) [21]

clickmaker, ну вот пробы сделал через  Class а не через record вот только число оно "хавать" не хочет

Type TlvLabel=Class ID:int64;end;
Var m1:TlvLabel;

Procedure Proc1(Value:TObject);
Begin
    if (Value is TlvLabel)  then Begin end;//  ShowMessage('Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.');
   //else      ShowMessage(“Обычное Числовое значение”);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Proc1(m1);
Proc1(2333);
end;


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

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


Ega23   (2014-03-25 13:59:00) [23]


> Сергей   (25.03.14 13:47) [47]
>
> Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64.
>  Спасибо большое!
> Вот только...


Блин. Ну ты опять через задницу всё переиначил.

Давай с самого начала: какая стоит задача? Глобальная.


clickmaker   (2014-03-25 13:54:00) [24]

> Будут ли “хаваться”

не будут. Потому что для Variant не определен TMyInt64.
Если TMyInt64 сделать классом, то можно юзать if (Value is TMyInt64)


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

Ega23, ты знаешь мысль очень хорошая(!) сделать через  TmyInt64. Спасибо большое!
Вот только...
Например вот так у меня получится...
 TMyInt64 = record    ID: Int64;   end;
Procedure Proc1 (Value:: Variant)
begin
case VarType(Value) of
   TMyInt64   :  ShowMessage('Это переменная TmyInt64 проверить размеченность Value.ID  и т.д.');
   else      ShowMessage(“Обычное Числовое значение НЕ TmyInt64 ”);
 end;
ПРАВИЛЬНО ЛИ Я НАПИСАЛ? (еще не проверял)
Будут ли “хаваться” и определяться при:
Var   I64:TMyInt64;
Proc1( I64);
Proc1(56234);


clickmaker   (2014-03-25 13:34:00) [26]

> Тогда уж класс MyID с конструкторами, сетерами и гетерами.
> Хм, 365 штук

с блэкджеком и шлюхами. 365 штук


Inovet   (2014-03-25 13:33:00) [27]

> [42] Ega23 ©   (25.03.14 13:22)
> TMyInt64 = record
>   ID: Int64;
> end;

Тогда уж класс MyID с конструкторами, сетерами и гетерами. Хм, 365 штук, да.


clickmaker   (2014-03-25 13:26:00) [28]

> Выходные только по високосным годам?

одна из наложниц по двойной ставке работает


Ega23   (2014-03-25 13:24:00) [29]


> и гарем из 365 наложниц


Выходные только по високосным годам?


Ega23   (2014-03-25 13:22:00) [30]

type

 TMyInt64 = record
   ID: Int64;
 end;

procedure Foo(Value: TMyInt64);
begin
 if Value.ID - размеченная then
   Proc1(Value.ID)
 else
   ShowMessage(неразмечаена переменная)
end;


И теперь сама Proc1 может принимать любые значения Int64, а вот Foo - уже только то, что ты туда осознанно передал.


sniknik   (2014-03-25 13:21:00) [31]

> sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
а мне нужен дворец на багамах и гарем из 365 наложниц... но реальность она несколько иная.


sniknik   (2014-03-25 13:20:00) [32]

+
Procedure Proc1(a: word); Begin {код}end;
и
Procedure Proc1(a, б: byte); Begin {код}end;
не отличаются в стиле передачи параметра, и там и там будет задействован регистр AX, т.е. если подменить формальное описание при работе с dll например, то можно задать для первого 2мя переменным а для второго наоборот одной... для компа без разницы.
просто это МЫ ПРИНИМАЕМ что в первом случае с ним работаем как с целым, а во втором как с двумя половинками... НАМ, людям, так удобнее.


turbouser   (2014-03-25 13:19:00) [33]


> Сергей

А какая цель преследуется? Т.е. зачем надо определять тип данных?


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

sniknik, а мне нужно чтобы Int64 иммела свой ИД нужного диапазона и далее их использовать как метки т.е если
Summ1 = -9223372036854775800+1
Suuma2 = -9223372036854775800+2
и в процедуру приходит  "первое значение" то программа "понимает" что это "первое" значение и другие процедуры тоже будут понимать эту привязку (метку). но беда если их забыть "разметить" нужным диапазоном или они будут =0 то как отличить Summ1 от Suuma2 от чилового значения ?


Inovet   (2014-03-25 13:16:00) [35]

Кстати, предупреждения компилятора о неинициализированных переменных мы, конечно же, игнорируем или совсем поотключали, чтобы не мешали, не ошибки ведь?


Ega23   (2014-03-25 13:15:00) [36]


> clickmaker, КАК Я ПОЙМУ ЧТО В ПРОЦЕДУРУ ПЕРЕДАНА НЕРАЗМЕЧЕННАЯ
> ПЕРЕМЕННАЯ! ПОДЧЕРКИВАЮ ПЕРЕМЕННАЯ ТИПА int64


Никак.

var
 a,b: Int64;
begin
 a := ...;
 b := ...;
 // Типа, "разметили" обе.
 Proc(a+b);
end;


Это не на уровне процедуры нужно определять.


Inovet   (2014-03-25 13:13:00) [37]

> [31] Сергей   (25.03.14 13:06)
> то можно понять что передалось соответсвующая переменная
> имеющая свой ИД, а не просто число какое нибудь. Или случайно
> битая Summ1 которая оказалась =0 или другого диапазона

Чем случайная последовательность битов отличается от неслучайной, если они находяться в одном разрешённом диапазоне?

Не занимайся ерундой - это тупиковый путь.


sniknik   (2014-03-25 13:12:00) [38]

> Если переменные размечены
переменные не размечены, тип это не метка данных (если не вариант), а "трафарет" как на эти данные смотреть...
один и тот же байт может быть и отдельным и частью интеджера/ворда/... даже строки, причем в одно и то же время, в зависимости через какой "трафарет" на него смотрят.


sniknik   (2014-03-25 13:09:00) [39]

> а если я незнаю то с этим еще нужно разбираться.
не разбираться как сделать нафантазированное нужно, а учится, разбираться как оно работает на самом деле, и после "фантазировать" уже исходя из знаний.

однако есть разница.


clickmaker   (2014-03-25 13:08:00) [40]

> то можно понять что передалось соответсвующая переменная
> имеющая свой ИД, а не просто число какое нибудь

так это и есть эти самые min и max
может, так понятно?)


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

Наверх

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