Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

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

 
QQ ©   (2004-09-06 16:21) [0]

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

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

type
 TStringArray = array of String;

procedure SomeProc(pArray : TStringArray = nil);

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

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

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


 
Defunct ©   (2004-09-06 16:26) [1]

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

const

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


 
VMcL ©   (2004-09-06 16:27) [2]

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

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

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

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

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


 
QQ ©   (2004-09-06 16:30) [3]

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


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

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


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

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


 
QQ ©   (2004-09-06 16:52) [6]

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


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

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;



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.076 c
1-1094209295
saint
2004-09-03 15:01
2004.09.19
Button, как определить какая кнопка активна в данный момент


6-1089387777
SnapIn
2004-07-09 19:42
2004.09.19
Как определить скорость работы сетевой карты


14-1093971859
Колян
2004-08-31 21:04
2004.09.19
А в Москве снова гремят взрывы...


4-1091975936
Zer0_no_pass
2004-08-08 18:38
2004.09.19
Растеризация ttf шрифта в консольном приложении


14-1093794187
ПЛОВ
2004-08-29 19:43
2004.09.19
:)