Próbuję użyć następującej funkcji, aby ustawić długość tablicy dynamicznej, która jest parametrem var. Pojawia się tylko błąd, gdy próbuję skompilować kod:
[Błąd dcc64] lolcode.dpr(138): Niezgodne typy E2008
function execute(var command : array of string) : Boolean;
begin
// Do something
SetLength(command,0);
end;
2 odpowiedzi
Zdefiniuj typ
type
TStringArray = array of string;
I możesz to zrobić
function Execute(var StringArray: TStringArray): boolean;
begin
// Do something
SetLength(StringArray, 0);
end;
Cierpisz z powodu powszechnego i fundamentalnego niezrozumienia parametrów tablicy. Co tu masz:
function execute(var command: array of string): Boolean;
W rzeczywistości nie jest tablicą dynamiczną. Jest to parametr otwartej tablicy a>.
Teraz możesz przekazać dynamiczną tablicę jako parametr do funkcji, która otrzymuje otwartą tablicę. Ale nie możesz modyfikować długości tablicy dynamicznej. Możesz jedynie modyfikować jego elementy.
Jeśli musisz zmodyfikować długość tablicy dynamicznej, procedura musi otrzymać tablicę dynamiczną. We współczesnym Delphi idiomatyczny sposób pisania to:
function execute(var command: TArray<string>): Boolean;
Jeśli używasz starszej wersji Delphi, która nie obsługuje tablic generycznych, musisz zadeklarować typ parametru:
type
TStringArray = array of string;
....
function execute(var command: TStringArray): Boolean;
Jak należy wybrać, czy używać parametrów tablicy otwartej, czy dynamicznej? Moim zdaniem zawsze powinieneś używać otwartych tablic, jeśli to możliwe. A jeśli nie jest to możliwe, w ostateczności użyj tablic dynamicznych. Powód bycia funkcją z otwartym parametrem tablicowym jest bardziej ogólny niż funkcja z dynamicznym parametrem tablicowym. Na przykład można przekazać tablicę o stałym rozmiarze jako parametr tablicy otwartej, ale nie, jeśli funkcja otrzymuje tablicę dynamiczną.
Podobne pytania
Powiązane pytania
Nowe pytania
delphi
Delphi to język do szybkiego tworzenia natywnych aplikacji dla systemów Windows, macOS, Linux, iOS i Android przy użyciu Object Pascal. Nazwa odnosi się do języka Delphi, a także jego bibliotek, kompilatora i IDE, które są używane do edycji i debugowania projektów Delphi.