Stavo guardando Delphi: array of Char and TCharArray "Incompatible Types" e ho iniziato a sperimentare. Quello che ho scoperto è piuttosto interessante.È una matrice dinamica di Char consentita quando il tipo di parametro è aperto array di Char?
procedure Clear(AArray: array of Integer);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := 0;
end;
var
MyArray: array of Integer;
begin
Clear(MyArray);
end.
Questo semplice esempio mostra come passare una matrice dinamica a una procedura utilizzando un parametro Open Array. Compila e funziona esattamente come previsto.
procedure Clear(AArray: array of Char);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := #0;
end;
var
MyArray: array of Char;
begin
Clear(MyArray);
end.
Ecco codice quasi identico con la sola differenza che utilizza una matrice di Char
anziché Integer
. Non viene compilato. Invece il compilatore sputa:
E2010 Incompatible types: 'Array' and 'Dynamic array'
Perché dovrebbe essere?
Dopo aver cercato per un po 'ho scoperto il rapporto QC this. Sto gestendo Delphi 2009 e sta ancora accadendo.
Che cosa è "come previsto"? L'array non viene cancellato nel primo caso. –
Ancora, +1, perché solo uno dei casi esegue la compilazione (anche se usiamo 'AnsiChar'), il che è piuttosto strano, poiché c'è una minima differenza tra un intero e un' AnsiChar'. –
@Andreas, Ok, mi hai portato li '. Un array vuoto non ha nulla da chiarire. Il mio codice di test ha ricevuto una chiamata a SetLength ma l'ho rimosso poiché non era direttamente rilevante per l'errore di compilazione. –