Estoy usando un registro compuesto de cadenas, booleanos, enteros, monedas y matrices de otros registros dentro de un método de una clase. Me gustaría inicializar de forma recursiva todos los campos de un tipo primitivo a vacío/falso/cero. Delphi no parece hacer esto por defecto. ¿Hay una manera directa de lograr esto que no implique acceder a cada campo por nombre y configurarlo manualmente?¿Cómo puedo inicializar un registro declarado como una variable local?
Respuesta
Puede usar ya sea uno de siguientes construcciones (donde Foo es un registro).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
Desde un puesto de Allen Bauer
Mientras observa los usos más comunes para FillChar con el fin de determinar si la mayoría de la gente utiliza FillChar a realidad llenar la memoria con carácter de datos o simplemente utilizar para inicializar la memoria con un determinado valor de bytes, descubrimos que era el último caso que dominaba su uso en lugar del anterior. Con eso decidimos mantener FillChar byte-centric.
O el mismo código con (probablemente) mejor legibilidad: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality
@ ImOrtality: He actualizado la respuesta para incluir su solución ZeroMemory. –
Tenga en cuenta que ZeroMemory es un contenedor para FillChar en * algunas * versiones de Delphi (d6 y 7 al menos). –
Tenga en cuenta que you should use Finalize before FillChar or ZeroMemory in some cases.
- 1. Cómo inicializar la variable local de subprocesos en C++?
- 2. Java: ¿Por qué debo inicializar una variable local primitiva?
- 3. ¿Cómo puedo guardar una variable local dentro de una fábrica
- 4. ¿Puedo recuperar un registro SVN desde una copia local?
- 5. variable booleana sin inicializar
- 6. cómo inicializar la variable covariante?
- 7. campo variable o declarado nulo
- 8. ¿Cómo puedo inicializar una fecha para NSdate?
- 9. una variable local a una consolidación
- 10. ¿Cómo declarar una variable local en Razor?
- 11. ¿Cómo puedo establecer un registro actual de BindingSource como nulo?
- 12. Diferentes formas de inicializar una variable
- 13. ¿Puedo capturar una variable local en una expresión LINQ como una constante en lugar de una referencia de cierre?
- 14. ¿Cómo puedo crear un procesador de anotación que procese una variable local?
- 15. Recolección de basura en una variable local
- 16. Obtener el nombre de una variable local
- 17. Lectura de un entero en una variable local en MIPS
- 18. ¿Cómo puedo inicializar un SparseVector en Eigen
- 19. ¿Cómo puedo leer un archivo de texto en mi disco local en una variable en javascript
- 20. ¿Por qué no puedo inicializar una variable estática con un valor no literal?
- 21. Crear una variable local en Haml solo
- 22. ¿Cómo puedo usar una variable de JavaScript como una variable de PHP?
- 23. Declaración de una matriz cuyo tamaño está declarado como const externo
- 24. ¿Puedo inicializar un atributo C# con una matriz u otra cantidad variable de argumentos?
- 25. ¿Cómo verificar si existe una variable con un valor sin "variable o método local indefinido"?
- 26. Cómo inicializar una biblioteca compartida en Linux
- 27. Inicializar un mapa privado estático como vacío
- 28. ¿Cómo puedo acceder a una propiedad de objeto nombrada como una variable en php?
- 29. Crear una imagen sin almacenarla como un archivo local
- 30. ¿Cómo se verifica el tipo de una variable local?
Tenga en cuenta que Delphi inicializa los tipos administrados de por vida (cadenas, matrices dinámicas, interfaces). – kludg
En Delphi-2009 y más tarde, un registro puede ser inicializado por 'Foo: = Default (TFoo);'. Consulte [Respuesta de David] (http://stackoverflow.com/a/11066205/576719) a la pregunta [¿Cómo liberar correctamente los registros que contienen varios tipos en Delphi a la vez?] (Http://stackoverflow.com/q/ 11065821/576719). –
también vea: [¿Qué variables se inicializan cuando está en Delphi?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere