Ha encontrado un inconveniente con el uso de registros.
consideran este código:
function Test: TTest;
begin
...
end;
Test.a := 1;
Lo que su código es similar al compilador en realidad es la siguiente:
TTest temp := Test;
temp.a := 1;
El compilador le está diciendo, con el mensaje de error, que la asignación es inútil , ya que solo asignará un nuevo valor a un valor de registro temporal, que se olvidará instantáneamente.
Además, el @List[10]
no es válido porque List[10]
nuevamente solo devuelve un valor de registro temporal, por lo que tomar la dirección de ese registro es bastante inútil.
Sin embargo, leer y escribir todo el registro está bien.
Entonces, para resumir:
List[10] := A; <- writing a whole record is OK
List[10].a:=1; <- List[10] returns a temporary record, pointless assignment
P:[email protected][10]; <- List[10] returns a temporary record, its address is pointless
es una manera simple y fuerte. pero cuando el tamaño del registro es muy grande, la pila se desborda debido a la variable local A y si esto funciona en un bucle o bucles es muy lento. –