![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить тип данных [D7]
Сергей © (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
может, так понятно?)