Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Вниздинамичные параметры функции Найти похожие ветки
← →
TeNY © (2004-08-05 20:36) [0]как можно создать функцию с динамичными параметрами
к примеру Find(find1,find2...findN)
ведь если их обьявить заранее то компилятор будет ругатся в случае если их не указать.Примером нужной функции является функция склеивания текстовых кусков String типа в один.
← →
Гаврила © (2004-08-05 20:37) [1]посмотри на функцию Format
там вторым параметром идет как раз array of const
← →
TeNY © (2004-08-06 11:57) [2]а где её взять?
← →
Мастер © (2004-08-06 11:59) [3]Либо массив параметров, либо использовать параметры по-умолчанию, напр:
function MasterFunc(p1: Integer=0;p2: Integer=0;p3: Integer=0;...pn: Integer=0);
← →
TeNY © (2004-08-06 12:47) [4]к примеру функция
concat(s[,s1,s2,s3]):string как оркганизовать её пытался найте её в System но там её неТ!
← →
Мастер © (2004-08-06 13:01) [5]Например, так:
function conc(s: String; Arr: array of String): String;
var
i: Integer;
Len: Integer;
begin
Result := s;
Len := Length(Arr);
if Len=0 then Exit;
for i := 0 to Len do Result := Result + Arr[i];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Conc("Ðàç",["Äâà", "Òðè", "×åòûðå"]));
end;
← →
begin...end © (2004-08-06 13:03) [6]
> [5] Мастер © (06.08.04 13:01)
> for i := 0 to Len
for i := 0 to Len - 1
← →
Мастер © (2004-08-06 13:08) [7]>begin...end © (06.08.04 13:03) [6]
Точно:-)
← →
TiNY (2004-08-06 13:20) [8]а при одном параметре функции conc("sss") выдается сообщение
[Error] Unit1.pas(41): Not enough actual parameters
← →
Ega23 © (2004-08-06 13:22) [9]TiNY (06.08.04 13:20) [8]
А кто array os string передавать будет? Дядя Вася?
← →
Мастер © (2004-08-06 13:25) [10]>TiNY (06.08.04 13:20) [8]
Второй параметр все равно нужно опередать, даже если он пустой -
Conc(s,[]);
← →
begin...end © (2004-08-06 13:28) [11]Или тогда пусть у тебя будет только array of string, и всё.
← →
Ega23 © (2004-08-06 13:29) [12]Или по-умолчанию его [] задай.
← →
Мастер © (2004-08-06 13:31) [13]>Ega23 © (06.08.04 13:29) [12]
Для массива нельзя задать значение по-умолчанию.
← →
Ega23 © (2004-08-06 13:33) [14]Для массива нельзя задать значение по-умолчанию.
Точно, это я забыл...
← →
TiNY (2004-08-06 13:46) [15]ну а как же concat("sss") c одним параметром работает
← →
Рамиль © (2004-08-06 13:49) [16]
> [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) [17]а едь тоже массив
← →
Рамиль © (2004-08-06 13:50) [18]Т. е. средствами языка такого не сделать.
← →
TeNY © (2004-08-06 14:15) [19]Но ведь сделали
← →
Плохиш © (2004-08-06 14:26) [20]
> TeNY © (06.08.04 14:15) [19]
> Но ведь сделали
Функции Concat/read(ln)/write(ln)/... преобразуются компилятором в нужный набор команд, который можно посмотреть в окне CPU.
← →
Рамиль © (2004-08-06 14:29) [21]
> Но ведь сделали
Перепишишь компилятор и ты сделаешь.
← →
TeNY © (2004-08-06 15:11) [22]А как написать функцию так чтобы к примеру входным параметром была строка типа "AAAA,BBBB,CCCC,DDDD," а выходным был этот самый array of string вида ["AAAA","BBBB","CCCC","DDDD",""]
А ЕСЛИ это возможно то как сделать так чтобы знак запятой в строке являлся разделителем элементов для массива без написания циклов... то есть функция распознавала запятую как разделитель
← →
Плохиш © (2004-08-06 15:13) [23]
> TeNY © (06.08.04 15:11) [22]
> без написания циклов
Что религия не позволяет?
← →
TeNY © (2004-08-06 15:25) [24]Да нет написать не проблема там к примеру s1:=copy(...рос(",",s)...) просто к тому массиву автоматически добавляется другой массив
← →
TeNY © (2004-08-07 06:32) [25]а как сделать чтобы результат функциибыл этот Array of String
← →
TeNY © (2004-08-07 06:32) [26]а как сделать чтобы результат функциибыл этот Array of String
← →
Тестировщица © (2004-08-07 07:33) [27]a обязательно "чтобы результат функциибыл этот Array of String
"? Может, тебе этот вариант подойдет?
http://delphimaster.net/view/1-1091703204/
← →
y-soft © (2004-08-07 08:59) [28]Вообще способов передавать переменное количество параметров в Delphi довольно много:
Использование возможностей языка:
- Использовать значения по умолчанию
- Уже упомянутый array of const
- Использовать тип Variant
Способы, применяемые в WinAPI:
- Передавать одним параметром указатель на буфер, а другим - его размер (или количество элементов)
- Передавать в качестве одного из параметров функцию обратного вызова, с помощью которой и можно поочередно получить все данные
- Передавать указатель на известную структуру (которая может быть переменной длины)
"Ассемблерный путь":
- Предварительно помещать параметры в стек
Аналогично не составляет большого труда и возвращать переменное количество значений...
← →
TeNY © (2004-08-09 12:35) [29]Понятно,а вот почему все таки нельзя результат функции Array сделать хотя если создать record а в нем массив то все получается
← →
Digitman © (2004-08-09 12:39) [30]
> 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-10 11:01) [31]так можно согласен а если прсто
function MyFunc(..): array of string; то компилятор ошибку дает
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.03 c