Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизУниверсальная переменная Найти похожие ветки
← →
DDA © (2004-06-16 01:06) [0]как бы мне сделать такую процедуру чтоб в параметрах можно было передавать любую переменую любого вида?
Возможноли это?
← →
Gero © (2004-06-16 01:08) [1]procedure a(const x);
begin
end;
← →
GuAV © (2004-06-16 01:08) [2]Procedure P1(var A);
Procedure P2(const A);
← →
GuAV © (2004-06-16 01:09) [3]Gero © (16.06.04 01:08) [1]
:) да, я торможу :)
← →
DDA © (2004-06-16 01:34) [4]вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)
← →
GuAV © (2004-06-16 01:47) [5]
> сбросить(обнулить,стереть,уничтожить,очистить)
не зная что нельзя знать как.
зы - посмотри Variant types - может что надо.
← →
Gero © (2004-06-16 01:49) [6]
> вот теперь мне нужно эту переменную сбросить(обнулить,стереть,уничтожить,очистить)
Какую переменную?
← →
pasha_golub © (2004-06-16 06:11) [7]Про обнуление это к IronHawk"y. :=)
← →
y-soft © (2004-06-16 07:53) [8]Есть еще распространенный способ - использование указателей на указатели
← →
ПсихЪ (2004-06-16 11:36) [9]Мне подобное понадобилось при создании универсальной процедуры криптования record"ов. Я использовал такой приём:
procedure ProcName( var Data; Size : integer );
var
i : integer;
begin
for i := 0 to Size - 1 do
begin
TBytes(Data)[i] := {присваиваем что-нибудь байту c номером i}
end;
end;
Вот пример простого шифрования произвольных record"ов:
procedure CryptData( var Data; Size : integer );
var
i : integer;
begin
for i := 0 to Size - 1 do
begin
TBytes(Data)[i] := TBytes(Data)[i] xor i;
end;
end;
Вызывается так:
type
RecordName1 = record
r1 : integer;
r2 : string[5];
end;
RecordName2 = record
r1 : string[5];
r2 : RecordName1;
end;
var
rn1 : RecordName1;
rn2 : RecordName2;
begin
rn1.r1 := 10;
rn1.r2 := "niger";
rn2.r1 := "niga";
rn2.r2 := rn1;
CryptData( rn1, SizeOf( RecordName1 ) );
CryptData( rn2, SizeOf( rn2 ) );
end.
Вот.
← →
Anatoly Podgoretsky © (2004-06-16 12:11) [10]ПсихЪ (16.06.04 11:36) [9]
Это не политкоректно
← →
Igorek © (2004-06-16 14:49) [11]
> DDA © (16.06.04 01:06)
> как бы мне сделать такую процедуру чтоб в параметрах можно
> было передавать любую переменую любого вида?
> Возможноли это?
Конечно возможно.
← →
panov © (2004-06-16 14:52) [12]function iif(isTrue: Boolean;aVar1,aVar2: Variant): Variant;
begin
if isTrue then Result := aVar1 else Result := aVar2;
end;
← →
Игорь Шевченко © (2004-06-16 14:59) [13]panov © (16.06.04 14:52)
Сравни:
a := iif (true, 2, 1/0)
и
a = 1 ? 2 : 1/0;
← →
panov © (2004-06-16 15:11) [14]>Игорь Шевченко © (16.06.04 14:59) [13]
Сравни:
Не понял, что сравнить?
← →
Игорь Шевченко © (2004-06-16 15:16) [15]panov © (16.06.04 15:11)
Обычно функция iif позиционируется, как замена оператора ? : в C.
Ее отличие от оператора заключается в первую очередь в том, что все ее аргументы вычисляются перед вызовом функции, поэтому ее применение иногда может сопровождаться весьма интересными эффектами.
← →
panov © (2004-06-16 15:19) [16]Игорь Шевченко © (16.06.04 15:16) [15]
угу.
Проверил пример из Игорь Шевченко © (16.06.04 14:59) [13],
результат - 2
если вызвать a := iif (False, 2, 1/0) - Exception, как и предполагал-)
← →
Anatoly Podgoretsky © (2004-06-16 15:29) [17]Игорь Шевченко © (16.06.04 14:59) [13]
Сравни a := iif (true, 123, "abc")
← →
Danilka © (2004-06-16 15:35) [18]Кстати, в Д7, в модуле MathUtils (если не ошибаюсь) есть процедура IfThen, которая как-раз описывается как аналог оператора "?:", у нее точно также, аргументы вычисляются перед вызовом, или все-таки компилятор знает про нее и расписывает ее как конструкцию if .. then .. else ..?
Нет под рукой Д7, а интересно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c