Tôi đang sử dụng một bản ghi gồm các chuỗi, booleans, số nguyên, tiền tệ và mảng các bản ghi khác bên trong một phương thức của một lớp. Tôi muốn đệ quy khởi tạo tất cả các trường của kiểu nguyên thủy thành rỗng/false/zero. Delphi dường như không làm điều này theo mặc định. Có cách nào đơn giản để thực hiện việc này không liên quan đến việc truy cập từng trường theo tên và đặt thủ công không?Làm cách nào để tôi có thể khởi tạo bản ghi được khai báo dưới dạng biến cục bộ?
Trả lời
Bạn có thể sử dụng hoặc một các cấu trúc sau đây (trong đó Foo là bản ghi).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
Từ một bài đăng từ Allen Bauer
Trong khi nhìn vào những ứng dụng phổ biến nhất cho FillChar nhằm xác định dù hầu hết mọi người sử dụng FillChar để thực sự lấp đầy bộ nhớ với nhân vật dữ liệu hoặc chỉ sử dụng nó để khởi tạo bộ nhớ với một số giá trị byte nhất định, chúng tôi phát hiện rằng đó là trường hợp thứ hai mà chi phối việc sử dụng nó thay vì trước đây là . Với điều đó, chúng tôi quyết định giữ lại FillChar byte-centric.
Hoặc cùng một mã với (có thể) tốt hơn khả năng đọc: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality
@ Im0rtality: Tôi đã cập nhật câu trả lời để đưa vào giải pháp ZeroMemory của bạn. –
Lưu ý rằng ZeroMemory là trình bao bọc cho FillChar trong * một số phiên bản * của Delphi (d6 và 7 ít nhất). –
- 1. Khai báo biến cục bộ dưới dạng cuối cùng mà không cần khởi tạo và gán trong if-statement
- 2. Khi nào và tại sao tôi muốn khai báo biến cục bộ dưới dạng __weak bằng ARC?
- 3. Truyền tham số bản ghi mà không khai báo nó trước tiên dưới dạng biến
- 4. Làm thế nào tôi có thể khai báo một biến toàn cục trong LLVM?
- 5. Biến cục bộ Javascript khai báo
- 6. Tôi có nên giữ các biến chỉ được sử dụng trong một phương thức lớp cục bộ hoặc khai báo chúng dưới dạng thuộc tính lớp không?
- 7. Biến Delphi có thể chưa được khởi tạo cảnh báo
- 8. Trả lại biến cục bộ tĩnh dưới dạng tham chiếu
- 9. Tôi có thể khai báo từ điển có mảng động dưới dạng loại giá trị không?
- 10. Tôi làm cách nào để tạo bộ xử lý chú thích xử lý Biến cục bộ?
- 11. Tôi có nên khởi tạo các biến mẫu trên khai báo hoặc trong hàm tạo không?
- 12. Khởi tạo bản đồ cá nhân tĩnh dưới dạng trống
- 13. Làm thế nào để khai báo đúng các biến toàn cục trong Perl?
- 14. Làm thế nào để khai báo các biến cục bộ trong postgresql?
- 15. Lỗi khởi tạo tĩnh nếu được đặt trước khai báo
- 16. Không thể sử dụng biến cục bộ trước khi được khai báo
- 17. Làm thế nào để khai báo một biến toàn cầu có thể được sử dụng trong toàn bộ chương trình
- 18. Làm thế nào để khai báo một biến cục bộ trong Razor?
- 19. Làm cách nào để khai báo bộ nhớ cục bộ trong OpenCL?
- 20. Làm cách nào để tôi có thể lưu các trường được điền vào dưới dạng PDF?
- 21. Khởi tạo Emacs dưới dạng tệp org: làm cách nào tôi có thể nhận được phiên bản đúng của chế độ org?
- 22. gcc, các biến toàn cục chưa được khởi tạo
- 23. Tôi có nên khai báo các biến được tiêm dưới dạng tạm thời trong Java EE không?
- 24. Có cờ gcc để khởi tạo bộ nhớ biến cục bộ không?
- 25. Làm cách nào để tôi có thể ghi đè lên khối bố cục TWIG?
- 26. Tạo biến cục bộ trong Haml chỉ
- 27. bash - Làm cách nào để khai báo số nguyên cục bộ?
- 28. Tôi có thể khai báo biến toàn cục trong xquery trong Marklogic Server không?
- 29. Các biến toàn cục được trình nạp elf khởi tạo như thế nào
- 30. Làm cách nào để phát ra phương thức có biến cục bộ MethodInfo được tải sẵn?
Lưu ý rằng Delphi khởi tạo các loại được quản lý lâu dài (chuỗi, mảng động, giao diện). – kludg
Trong Delphi-2009 và sau đó một bản ghi có thể được khởi tạo bởi 'Foo: = Mặc định (TFoo);'. Xem [Câu trả lời của David] (http://stackoverflow.com/a/11066205/576719) cho câu hỏi [Làm cách nào để ghi lại các bản ghi miễn phí có chứa nhiều loại khác nhau trong Delphi cùng một lúc?] (Http://stackoverflow.com/q/ 11065821/576719). –
cũng thấy: [Biến nào được khởi tạo khi ở Delphi?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere