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

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

Значения по умолчанию для массивов, как параметров


QQ ©   (2004-09-06 16:21:00) 

Требуется задать значение по умолчанию для массива - параметра процедуры.

procedure SomeProc(pArray : array of String = []);
не пашет, говорит - такая фича не поддерживается.

type
 TStringArray = array of String;

procedure SomeProc(pArray : TStringArray = nil);

компилируется

но при попытке передать константные параметры жестоко ругается:
SomeProc(['String1', 'String2']);
считает, раз в квадратных скобках - значит множество,
а множество, естественно, в массив не преобразовывается.

Что делать? Перегружать процедуру? По другому никак?


Семен Сорокин   (2004-09-06 16:58:00) [1]

QQ ©   (06.09.04 16:52) [6]
type
TMyClass = class
...
public
  constructor Create(AData: TMyData); overload;
  constructor Create(AData: TMyData; Arr: array of const); overload;
end;

constructor Create(AData: TMyData); overload;
begin
...
end;

constructor Create(AData: TMyData; Arr: array of const);
begin
Create(AData);
//действия с Arr
end;


QQ   (2004-09-06 16:52:00) [2]

2Семен Сорокин ©
Просто эта функция - конструктор, который уже используется в большом количестве мест, поэтому передавать параметры массивом вариантов нет смысла - это аналогично (в моем случае) перегрузке функции, так как предыдущие вызовы конструктора перестанут компилироваться.


Семен Сорокин   (2004-09-06 16:44:00) [3]

2QQ
имхо задать значение по умолчанию для параметра ф-ии - массива не получится.
Реализацию передачи параметров можешь глянуть в ф-ии Format (2-ой параметр), там используется конструкция array of const.


QQ   (2004-09-06 16:34:00) [4]

to Defunct ©   (06.09.04 16:26) [1]
>Массивы-константы задаются в круглых скобочках.
>
>const
>
>MyArray : array[1..3] of shortstring = ('123', '456', '789');
к сожалению, конструкция
SomeProc(('String1', 'String2'));
не компилируется


QQ   (2004-09-06 16:30:00) [5]

угу, Incompatible types: Set and TIntegerArray в случае Integer
а в случае String говорит, что элементами множества могут быть только перечисляемые типы


VMcL   (2004-09-06 16:27:00) [6]

> procedure SomeProc(pArray : array of String = []);
здесь Open array

> type
TStringArray = array of String;
procedure SomeProc(pArray : TStringArray = nil);

здесь динамический массив

> SomeProc(['String1', 'String2']);
здесь Open array

> считает, раз в квадратных скобках - значит множество,
компилятор так и пишет?


Defunct   (2004-09-06 16:26:00) [7]

Массивы-константы задаются в круглых скобочках.

const

MyArray : array[1..3] of shortstring = ('123', '456', '789');


Наверх

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