![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамичные параметры функции
TeNY © (2004-08-05 20:36:00)как можно создать функцию с динамичными параметрами
к примеру Find(find1,find2...findN)
ведь если их обьявить заранее то компилятор будет ругатся в случае если их не указать.Примером нужной функции является функция склеивания текстовых кусков String типа в один.
TeNY (2004-08-10 11:01:00) [1]так можно согласен а если прсто
function MyFunc(..): array of string; то компилятор ошибку дает
Digitman (2004-08-09 12:39:00) [2]
> TeNY © (09.08.04 12:35) [29]
> почему все таки нельзя результат функции Array сделать
глупости ...
можно !
type
TMyArray = array of string;
..
function MyFunc(..): TMyArray;
begin
SetLength(Result, 2);
Result[0] := 'First';
Result[1] := 'Second';
end;
TeNY (2004-08-09 12:35:00) [3]Понятно,а вот почему все таки нельзя результат функции Array сделать хотя если создать record а в нем массив то все получается
y-soft (2004-08-07 08:59:00) [4]Вообще способов передавать переменное количество параметров в Delphi довольно много:
Использование возможностей языка:
- Использовать значения по умолчанию
- Уже упомянутый array of const
- Использовать тип Variant
Способы, применяемые в WinAPI:
- Передавать одним параметром указатель на буфер, а другим - его размер (или количество элементов)
- Передавать в качестве одного из параметров функцию обратного вызова, с помощью которой и можно поочередно получить все данные
- Передавать указатель на известную структуру (которая может быть переменной длины)
"Ассемблерный путь":
- Предварительно помещать параметры в стек
Аналогично не составляет большого труда и возвращать переменное количество значений...
Тестировщица (2004-08-07 07:33:00) [5]a обязательно "чтобы результат функциибыл этот Array of String
"? Может, тебе этот вариант подойдет?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1091703204&n=0
TeNY (2004-08-07 06:32:00) [6]а как сделать чтобы результат функциибыл этот Array of String
TeNY (2004-08-07 06:32:00) [7]а как сделать чтобы результат функциибыл этот Array of String
TeNY (2004-08-06 15:25:00) [8]Да нет написать не проблема там к примеру s1:=copy(...рос(',',s)...) просто к тому массиву автоматически добавляется другой массив
Плохиш (2004-08-06 15:13:00) [9]
> TeNY © (06.08.04 15:11) [22]
> без написания циклов
Что религия не позволяет?
TeNY (2004-08-06 15:11:00) [10]А как написать функцию так чтобы к примеру входным параметром была строка типа 'AAAA,BBBB,CCCC,DDDD,' а выходным был этот самый array of string вида ['AAAA','BBBB','CCCC','DDDD','']
А ЕСЛИ это возможно то как сделать так чтобы знак запятой в строке являлся разделителем элементов для массива без написания циклов... то есть функция распознавала запятую как разделитель
Рамиль (2004-08-06 14:29:00) [11]
> Но ведь сделали
Перепишишь компилятор и ты сделаешь.
Плохиш (2004-08-06 14:26:00) [12]
> TeNY © (06.08.04 14:15) [19]
> Но ведь сделали
Функции Concat/read(ln)/write(ln)/... преобразуются компилятором в нужный набор команд, который можно посмотреть в окне CPU.
TeNY (2004-08-06 14:15:00) [13]Но ведь сделали
Рамиль (2004-08-06 13:50:00) [14]Т. е. средствами языка такого не сделать.
Рамиль (2004-08-06 13:49:00) [15]
> [15] TiNY (06.08.04 13:46)
{ Predefined constants, types, procedures, }
{ and functions (such as True, Integer, or }
{ Writeln) do not have actual declarations.}
{ Instead they are built into the compiler }
{ and are treated as if they were declared }
{ at the beginning of the System unit. }
TeNY (2004-08-06 13:49:00) [16]а едь тоже массив
TiNY (2004-08-06 13:46:00) [17]ну а как же concat('sss') c одним параметром работает
Ega23 (2004-08-06 13:33:00) [18]Для массива нельзя задать значение по-умолчанию.
Точно, это я забыл...
Мастер (2004-08-06 13:31:00) [19]>Ega23 © (06.08.04 13:29) [12]
Для массива нельзя задать значение по-умолчанию.
Ega23 (2004-08-06 13:29:00) [20]Или по-умолчанию его [] задай.