Estaba viendo Delphi: array of Char and TCharArray "Incompatible Types" y comencé a experimentar. Lo que descubrí es bastante interesante.¿Se permite una matriz dinámica de Char cuando el tipo de parámetro es una matriz abierta de 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.
Este pequeño ejemplo sencillo muestra cómo se puede pasar una matriz dinámica a un procedimiento usando un parámetro Abrir matriz. Se compila y se ejecuta exactamente como se esperaba.
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.
Aquí es código casi idéntica la única diferencia de que está utilizando una gran variedad de Char
en lugar de Integer
. No compila En cambio, el compilador escupe:
E2010 Incompatible types: 'Array' and 'Dynamic array'
¿Por qué sería esto?
Después de buscar por un tiempo descubrí this informe de control de calidad. Estoy ejecutando Delphi 2009 y todavía está sucediendo.
¿Qué es "como se espera"? La matriz no se borra en el primer caso. –
Aún así, +1, para solo uno de los casos compila (incluso si usamos 'AnsiChar'), que es bastante extraño, ya que hay muy poca diferencia entre un entero y un' AnsiChar'. –
@Andreas, Ok, me tienes allí. Una matriz vacía no tiene nada que borrar. Mi código de prueba tenía una llamada a SetLength, pero la eliminé porque no era directamente relevante para el error de compilación. –