2011-12-29 14 views
6

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

11

Użyj klasy Zero klasy od firmy Scalaz.

Link to a blog post z mojego na pokrewny temat.

+1

Świetny post na blogu! Dlaczego sugerujesz rozwiązanie oparte na Scalaz? –

+0

@NikitaVolkov: Nie musisz używać Scalaz. Zawarłem link do 'Zero.scala' w Scalaz i jak widzisz, bycie samemu napisać jest banalnie proste. – missingfaktor

2

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 
} 
+1

@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

+0

@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' –

+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. –

Powiązane problemy