Szukam rozwiązania do testowania, jeśli wartość dowolnego typu jest pusta (lub domyślna). To znaczy. jakiś sposób na Any
która sprawdza, czy instancja String
jest równa ""
, takie Int
- do 0
, A Float
- do 0f
, A Boolean
- do false
, A List
nie zawiera elementów i tak dalej do innych typów. Primarilly Interesuje mnie, czy jakieś rozwiązanie już istnieje w standardowej bibliotece, a jeśli nie, w jaki sposób je wdrożyć. Wierzę, że może to być użyteczne i jeśli nie istnieje w standardowej bibliotece, powinno to zostać zasugerowane.Test pustej wartości uniwersalny dla wszystkich typów
Odpowiedz
Użyj klasy Zero
klasy od firmy Scalaz.
Link to a blog post z mojego na pokrewny temat.
Zamiast przechodząc wokół rzeczy typu T, można przejść wokół rzeczy typu opcji [T], obejmując wszystkie ważne rzeczy typu T, tak jak
val thing = 1
val thingOption = Some(thing)
i przechowywania wszystkich nieprawidłowych danych jako Nones, jak tak
val thingOption = None
Następnie, jeśli chcesz, aby podjąć decyzję w oparciu o wartości thingOption, można zrobić to tak
thingOption match {
case None => // Whatever you want to do with defaults
case Some(x) => // Whatever you want to do with 'thing' if it isn't a default
}
@NikitaVolkov, proponuję eksperyment, proszę umieścić przypomnienie na rok od teraz w kalendarzu z linkiem do twojego pytania. Gdy pojawi się przypomnienie, wróć do tej odpowiedzi i komentarza i sprawdź, czy nadal czujesz to samo. – huynhjl
@huynhjl Wiem dobrze o zaletach podejścia "Opcja" powyżej "null", ale z moją uwagą wskazałem, że ta sugestia nie ma nic wspólnego z bieżącym pytaniem. Istnieje dość stabilna granica między 'null' i' "" 'lub' 0' –
Nie odpowiada to bezpośrednio na pytanie, ale jest bardzo istotne. Testowanie, czy wartość jest "zero-esque" jest często znakiem, że powinieneś używać opcji zamiast tego. –
- 1. Szukaj rubin hash dla wartości pustej
- 2. Jak sprawdzić var dla wartości pustej?
- 3. Filtr aspektów Algolia według pustej/pustej wartości
- 4. Łatwiejszy sposób zapisu wartości pustej lub pustej?
- 5. Zarejestruj dla wszystkich typów plików (CFBundleDocumentTypes)
- 6. przeciążeniem Funkcja szablonowe dla wszystkich typów String
- 7. Czy porównać pracę dla wszystkich typów?
- 8. columnDefinition = „text” dla wszystkich typów baz danych
- 9. TypeScript: Tworzenie pustej tablicy typów maszynowych
- 10. ustawiania wartości opcji HTML do pustej struny
- 11. Biblioteka typów typów danych dla C
- 12. Lista wszystkich typów sqibase sql
- 13. Uniwersalny znacznik czasu dla .net DateTime
- 14. JMSSerializerBundle Wyświetl pustą wartość zamiast wartości pustej
- 15. ASP.NET nie może buforować wartości pustej
- 16. Test wartości wewnątrz łańcucha
- 17. Właściwość nie-pusta odwołuje się do wartości pustej lub przejściowej dla wartości trwałej
- 18. Uniwersalny kod binarny dla różnych wersji SSE
- 19. (Javascript) Lista wartości "navigator.appName" dla wszystkich przeglądarek?
- 20. Znajdowanie wartości wspólnych dla wszystkich elementów
- 21. Jak częściowo specjalizować szablon klasy dla wszystkich typów pochodnych?
- 22. pobliżu pustej Java dla pętli działa dziwnie
- 23. Usuń element pustej wartości w tablicy
- 24. Wykrywanie wartości pustej/pustego wejścia od użytkownika
- 25. Entity Framework: Aktualizowanie pola do wartości pustej?
- 26. php Tworzenie domyślnego obiektu z pustej wartości?
- 27. Jak mogę sprawdzić/null pustej wartości cshtml
- 28. Reprezentowanie wartości pustej jako pusty element w xml jaxb
- 29. Równość dla typów anonimowych
- 30. Ograniczenia typu we wszystkich instancjach rodzinnych typów
Świetny post na blogu! Dlaczego sugerujesz rozwiązanie oparte na Scalaz? –
@NikitaVolkov: Nie musisz używać Scalaz. Zawarłem link do 'Zero.scala' w Scalaz i jak widzisz, bycie samemu napisać jest banalnie proste. – missingfaktor