Cierpisz na wspólną i podstawową mis-understa nding parametrów tablicy. Co tu masz:
function execute(var command: array of string): Boolean;
nie jest w rzeczywistości numerem dynamic array. Jest to open array parameter.
Teraz można przekazać dynamiczną tablicę jako parametr do funkcji, która otrzymuje otwartą tablicę. Ale nie można modyfikować długości tablicy dynamicznej. Możesz modyfikować tylko jego elementy.
Jeśli konieczne jest zmodyfikowanie długości tablicy dynamicznej, procedura musi otrzymać tablicę dynamiczną. We współczesnej Delphi idiomatyczne sposób napisać, że jest:
function execute(var command: TArray<string>): Boolean;
Jeśli używasz starszej wersji Delphi, który nie obsługuje macierze generyczne to trzeba zadeklarować typ parametru:
type
TStringArray = array of string;
....
function execute(var command: TStringArray): Boolean;
Jak wybrać, czy używać parametrów tablicy otwartej lub dynamicznej? Moim zdaniem zawsze powinieneś używać otwartych tablic, jeśli to możliwe. A jeśli nie jest to możliwe, użyj dynamicznych tablic jako ostatecznego ośrodka. Powód będący funkcją z otwartym parametrem tablicy jest bardziej ogólny niż z parametrem dynamicznej tablicy. Na przykład można przekazać tablicę o stałej wielkości jako parametr otwartej tablicy, ale nie, jeśli funkcja otrzymuje tablicę dynamiczną.
Ponieważ ta strona jest w języku angielskim, łatwiej byłoby większości ludzi odpowiedzieć na twoje pytanie, gdybyś mógł zamieścić angielskie tłumaczenie swojego komunikatu o błędzie - zakładam, że byłby to "Niezgodny token"? – RobV
@RobV: "Niezgodne typy", prawdopodobnie w języku niemieckim lub holenderskim. –
Tak, przepraszam. Ale w tym przypadku angielskie tłumaczenie nie różni się zbytnio. Niezgodne typy. –