Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

динамичные параметры функции


Страницы:   1 2

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]

Или по-умолчанию его [] задай.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо