Używam języka D i chciałbym uzyskać domyślną wartość typu ogólnego, podobną do sposobu, w jaki default(T)
działa w języku C#. czy to możliwe? Jeśli nie - jakie są możliwe rozwiązania?Jak uzyskać domyślną wartość typu ogólnego?
Odpowiedz
Myślę, że T.init
może być tym, czego szukasz.
Każdy typ D ma wartość domyślną. Dostęp do niego można uzyskać za pośrednictwem właściwości typu: init
. int.init
, float.init
, Object.init
itp. W przypadku typu szablonowego nadal jest to właściwość init
. Na przykład, jeśli masz typowy typ T
, będzie to T.init
.
init
jest najczęściej najbliższy wartości błędu, jaką ma typ. W przypadku typów integralnych jest to 0
. Dla bool
jest to false
. W przypadku typów zmiennoprzecinkowych jest to NaN
. W przypadku typów znaków jest to \u00FF
. W przypadku odniesień (to znaczy klas) i wskaźników, jest to null
. W przypadku structs jest to wartość, do której są bezpośrednio zainicjowane jego zmienne składowe. na przykład W przypadku
struct S
{
int a = 17;
bool b;
}
S.init
będzie wystąpienie S
którego a
był 17
i b
był false
. Na szczególną uwagę zasługuje fakt, że właściwość init
jest powodem, że struktury w D nie mogą mieć domyślnych konstruktorów. Ich domyślny stan - czyli ich własność init
- musi być znany w czasie kompilacji, podczas gdy konstruktor byłby uruchamiany w środowisku wykonawczym, więc domyślna wartość struct nie może zostać utworzona za pomocą konstruktora, a więc, gdy struktura może mieć konstruktory, nie mogą mieć domyślnych konstruktorów.
W przypadku wyliczenia właściwość init
zależy od rodzaju wyliczenia, jakie to jest. Manifest stałe takie jak
enum i = 7;
miałby taką samą init
nieruchomości jako swojego rodzaju (int
w tym przypadku), ponieważ tak naprawdę nie tworzyć nowego typu. Jednak w przypadku wyliczeń, które faktycznie tworzą nowy typ, np.
enum E {a = 7, b = 17};
domyślną wartością jest pierwsza wartość w wyliczeniu. W tym przypadku E.init
będzie a
.
Tablice są tam, gdzie robi się trochę interesująco. Właściwość init
dla tablic dynamicznych i tablic asocjacyjnych to null
. Jednak przy przydzielaniu pamięci dla tablicy (czy to statycznej czy dynamicznej), każdy element jest inicjowany na jego właściwość typu: init
. Tak więc z tablicami macie zarówno wartość ich wartości init
, jak i wartość ich elementów w postaci init
.
W każdym przypadku ogólny sposób uzyskania wartości domyślnej typu to T.init
, gdzie T
jest typem, który ma być domyślną wartością - czy jest to określony typ czy parametr szablonu.
Re wyliczenia, według codepad.org:
enum Foo {
a = 3,
b = 2,
}
import std.stdio;
void main() { writef("%d", Foo.init); }
daje:
Na uwagę zasługuje jednak fakt, że 'writeln (Foo.init)' wypisuje 'a' zamiast' 3'. –
- 1. Jak uzyskać wartość domyślną każdego rodzaju
- 2. Jak uzyskać poprawną definicję tekstu typu ogólnego za pomocą odbicia?
- 3. W jaki sposób wyemitujesz domyślną wartość typu?
- 4. Określ domyślną wartość dla typu odniesienia
- 5. Definicja typu ogólnego przekazywania
- 6. Jak uzyskać atrybut ".class" z ogólnego parametru typu?
- 7. Jak uzyskać rzeczywiste argumenty typu reifikowanego parametru ogólnego w Kotlin?
- 8. Utwórz wystąpienie typu ogólnego?
- 9. C# Uzyskaj nazwę typu ogólnego
- 10. Włączanie typu ogólnego?
- 11. Jak ustalić, czy ParameterInfo jest typu ogólnego?
- 12. C#: Jak znaleźć wartość domyślną dla typu run-time?
- 13. dla typu wejściowego = "liczba" jak ustawić wartość domyślną na 0
- 14. Jak podać wartość domyślną dla parametru typu delegata w C#?
- 15. Jak uzyskać wartość typu Boolean z obiektu
- 16. Czy Guzowaty Znacznik Typu może uzyskać określony typ pola ogólnego?
- 17. jak uzyskać wartość domyślną typu, jeśli typ jest znany tylko jako System.Type?
- 18. Dynamicznie uzyskać wartość atrybutu klasy od typu
- 19. Dostęp do statycznego atrybutu statycznego typu ogólnego
- 20. Jak uzyskać wartość domyślną dla pola w modelu Django?
- 21. Jak uzyskać domyślną wartość css po funkcji jquery
- 22. Jak wybrać domyślną wartość pola
- 23. jak ustawić wartość domyślną HTML.EditorFor()
- 24. Dodaj domyślną wartość pola typu enum w schemacie budowniczego
- 25. Jak rzutować obiekt na listę typu ogólnego w F #
- 26. Ustaw wyliczenie na domyślną wartość
- 27. Jak złapać TRTTIParamter za wartość domyślną
- 28. Jak zapisać wartość do ogólnego pola klasy (Mono.Cecil)
- 29. bash przypisz wartość domyślną
- 30. Ustaw domyślną wartość właściwości
Co o teksty stałe? –
Warto zauważyć, że 'char.init == '\ xFF''. –
Uznałem, że będę tęsknił za niektórymi typami, ale nie mogłem wymyślić, kiedy napisałem swoją pierwszą odpowiedź. Mam nadzieję, że wszyscy są teraz w swoim. –