Używam rekordu złożonego z ciągów, booleans, liczb całkowitych, walut i tablic innych rekordów wewnątrz metody klasy. Chciałbym rekursywnie zainicjować wszystkie pola typu pierwotnego na puste/fałszywe/zero. Delphi domyślnie nie wydaje się tego robić. Czy istnieje prosty sposób osiągnięcia tego, który nie wymaga dostępu do każdego pola po nazwie i ręcznego ustawiania go?Jak mogę zainicjować rekord zadeklarowany jako zmienna lokalna?
Odpowiedz
Możesz użyć albo jednego następujących konstrukcji (gdzie Foo jest rekordem).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
z postu z Allen Bauer
Patrząc na najczęstszych zastosowań dla FillChar w celu ustalenia czy większość ludzi użyć FillChar do faktycznie wypełnić pamięć z charakterem danych lub po prostu użyć Aby zainicjować pamięć z pewną podaną wartością bajtu, my ustaliliśmy, że w tym ostatnim przypadku zdeklasowało się raczej jego użycie niż , a nie poprzednik . Z tym zdecydowaliśmy się zachować FillChar bajtocentryczne.
Albo ten sam kod z (prawdopodobnie) lepszym czytelność: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality
@ Im0rtality: Zaktualizowałem odpowiedź, aby uwzględnić Twoje rozwiązanie ZeroMemory. –
Zauważ, że ZeroMemory jest opakowaniem dla FillChar w * niektórych * wersjach Delphi (przynajmniej d6 i 7). –
- 1. .NET zmienna lokalna optymalizacja
- 2. Jinja2: zmienna lokalna/globalna
- 3. Smarty zmienna lokalna konkatenacji sznurkiem
- 4. Ruby zmienna lokalna jest niezdefiniowana
- 5. zmienna lokalna jako argument inny niż nazwa pliku
- 6. Łańcuchy Java: prywatna zmienna statyczna vs zmienna lokalna
- 7. Metoda rozszerzenia i lokalna zmienna "ta"
- 8. Lua - lokalna wymagana jest zawsze przypisana lokalna zmienna?
- 9. "zmienna lokalna przywoływana przed przypisaniem" - tylko funkcje?
- 10. C++ 11 zmienna lokalna bez odniesienia
- 11. niezdefiniowana zmienna lokalna lub metoda 'current_user'
- 12. jak mogę zainicjować listę?
- 13. NameError (niezdefiniowana zmienna lokalna lub metoda `devise_parameter_sanitizer”
- 14. Ostatnia zmienna lokalna nie może być przypisana
- 15. Zmienna „MyException” jest zadeklarowany ale nigdy nie używane
- 16. Czy mogę bezpośrednio dodać rekord jako obiekt do listy napisów?
- 17. Dlaczego domyślna zmienna lokalna Chrome debuggera jest niezdefiniowana?
- 18. Jak zainicjować integer jako "a = {1,}" kompilować?
- 19. niezdefiniowana lokalna zmienna lub metoda `confirmed_at 'dla Devise
- 20. Test pomocnika aplikacji RSpec: Niezdefiniowana zmienna lokalna lub metoda `helper`
- 21. Jak mogę przekonwertować wektor na rekord?
- 22. Tablica jako zmienna sesji
- 23. Niezdefiniowana zmienna lokalna lub metoda "unconfirmed_email" podczas rejestrowania użytkowników?
- 24. Zmienna lokalna jest zawsze zerowa podczas próby renderowania częściowego
- 25. Niezdefiniowana zmienna lokalna lub metoda "sesja" w teście modelu
- 26. Instalacja Rails 3/Recaptcha - Niezdefiniowana zmienna lokalna lub metoda "recaptcha_tags"
- 27. niezdefiniowana zmienna lokalna lub metoda `acts_as_taggable 'in gem
- 28. __func__ Zmienna predefiniowana lokalna C++ 11, nie będzie kompilować
- 29. Czy zmienna składowa i lokalna zmienna metody mogą mieć tę samą nazwę?
- 30. Dlaczego moja JavaScript jest podnoszona zmienna lokalna zwracająca undefined, ale zmienna globalna hoisted zwraca puste?
Należy pamiętać, że Delphi inicjuje typy zarządzane przez cały okres eksploatacji (ciągi, dynamiczne tablice, interfejsy). – kludg
W Delphi-2009 i nowszym rekord można zainicjować za pomocą 'Foo: = Default (TFoo);'. Zobacz [odpowiedź Dawida] (http://stackoverflow.com/a/11066205/576719) na pytanie [Jak poprawnie uwolnić rekordy zawierające różne typy w Delphi naraz?] (Http://stackoverflow.com/q/ 11065821/576719). –
Zobacz także: [Które zmienne są inicjowane w Delphi?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere