Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизЗначения по умолчанию для массивов, как параметров Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c