![]() |
| ||
|
|
Новости |
Поиск |
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);? Как это сделать ?
Inovet (2014-03-25 12:12:00) [61]> [9] Сергей (25.03.14 12:09)
> clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.
А надо представлять. В хелпе всё описано. Дебагер имеется.
Inovet (2014-03-25 12:11:00) [62]Можно. Нало пойти по стеку на адрес возврата и там поковырять на предмет константности переданного значения. Вот это будет уже полный
> изврат, неоптимально, адъ и Израиль.
Сергей (2014-03-25 12:09:00) [63]clickmaker, незнаю представляю или нет я вопрос задаю так как мне нужно.
=======================================
Попробую выразить еще так:
Const i64c:int64=0;
Var i64:int64;
{.....}
i64:=0;
Proc1(0); Proc1(i64); Proc1(i64c);
ноль “0” передавать в процедуру можно! Но если это переменная или константа то она не может быть нулём и нужно выдать ошибку. Реально ли такое сделать ?
clickmaker (2014-03-25 12:05:00) [64]> [7] Сергей (25.03.14 11:58)
ты вообще представляешь, как параметры типа значение в функцию передаются?
Сергей (2014-03-25 11:58:00) [65]Ega23, жаль! :-( Не то!
У меня вопрос стоит так:
"Жесткое" ли число (т.е. в виде чисел) или всё такие переменная? (типа int64).
Ega23 (2014-03-25 11:53:00) [66]
> Вот только с числовыми жёсткими значениями как быть ? 2?
> 234? 34567? и т.д
ЕМНИП, они к ближайшему диапазону будут приведены.
Ну там, 2 - varByte, 234 - varWord и т.п.
Если только явно не приводить:
Foo(Integer(2));
Но на всякий ещё раз напоминаю: это - изврат, неоптимально, адъ и Израиль.
Сергей (2014-03-25 11:50:00) [67]Ega23, спасибо это видимо то что нужно! попробую!
Вот только с числовыми жёсткими значениями как быть ? 2? 234? 34567? и т.д
Ega23 (2014-03-25 11:37:00) [68]Можно, но извращённо.
procedure TForm9.Button2Click(Sender: TObject);
var
b: Byte;
w: Word;
i: Integer;
i64: Int64;
begin
Foo(b);
Foo(w);
Foo(i);
Foo(i64);
Foo('foo');
end;
procedure TForm9.Foo(Value: Variant);
begin
case VarType(Value) of
varByte : ShowMessage('Byte');
varWord : ShowMessage('Word');
varInteger : ShowMessage('Integer');
varInt64 : ShowMessage('Int64');
else
ShowMessage('Unknown');
end;
end;
sniknik (2014-03-25 11:35:00) [69]в коде можно определить тип у вариантов, а не у "жесткого" типа.
+ можно конечно сделать несколько "перекрытых" (overload) процедур... но это не в коде будет определятся, а на этапе компиляции. какую процедуру подставить... ну весьма не надежно/не очевидно если хочешь писать так как написал - Proc1( 34) .
Германн (2014-03-25 11:29:00) [70]http://www.delphibasics.ru/Overload.php
clickmaker (2014-03-25 11:08:00) [71]> Можно ли определить в коде самой процедуре что ей передаётся
нет