Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1087056449
Xtz
2004-06-12 20:07
2004.07.04
Настроить маршрутизацию в 2003 сервере


14-1087177142
Думкин
2004-06-14 05:39
2004.07.04
С днем рождения! 14 июня


14-1087387192
osama
2004-06-16 15:59
2004.07.04
что слушаем


4-1085326078
solo
2004-05-23 19:27
2004.07.04
Путь в формате 8.3 в коммандной строке


14-1087224535
Piter
2004-06-14 18:48
2004.07.04
Jedi VCL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский