Sto cercando una soluzione per verificare se un valore di qualsiasi tipo è vuoto (o predefinito). Cioè qualche tipo di metodo su Any
che verifica se un'istanza String
è uguale a ""
, un Int
- a 0
, un Float
- a 0f
, un Boolean
- a false
, un List
contiene articoli e così via per altri tipi. Prima di tutto mi interessa sapere se alcune soluzioni esistono già nella libreria standard e se no come la implementeresti. Credo che questo potrebbe essere utile e se non esiste nella libreria standard dovrebbe essere suggerito.Test su valore vuoto universale per tutti i tipi
risposta
Utilizzare classe Zero
da Scalaz.
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._
scala> def isEmpty[A : Zero](value: A) = value == mzero[A]
isEmpty: [A](value: A)(implicit evidence$1: scalaz.Zero[A])Boolean
scala> isEmpty("")
res0: Boolean = true
scala> isEmpty(List())
res1: Boolean = true
scala> isEmpty(false)
res2: Boolean = true
scala> isEmpty("O HAI")
res3: Boolean = false
Link to a blog post di un mio argomento correlato.
Invece di passare intorno alle cose di tipo T, si potrebbe passare intorno alle cose di tipo opzione [T], avvolgendo ogni cosa validi di tipo T, in questo modo
val thing = 1
val thingOption = Some(thing)
e la memorizzazione di tutti i dati non validi come Nones, in questo modo
val thingOption = None
quindi, se si vuole prendere una decisione in base al valore di thingOption, si può fare in questo modo
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, propongo un esperimento, metto un promemoria per un anno da oggi nel tuo calendario con un link alla tua domanda. Quando viene visualizzato il promemoria, torna a questa risposta e al tuo commento per vedere se ti senti ancora lo stesso. – huynhjl
@huynhjl Conosco molto bene i vantaggi dell'approccio 'Option' su' null', ma con la mia osservazione sottolineo che questo suggerimento non ha nulla a che fare con la domanda corrente. C'è un bordo piuttosto solido tra 'null' e' "" 'o' 0' –
Questo non risponde direttamente alla domanda, ma è molto rilevante. Testare se un valore è "zero-esque" è spesso un segno che dovresti usare Opzioni invece. –
- 1. Test Autofac tutti i tipi registrati possono essere risolti
- 2. DDD è adatto per tutti i tipi di applicazione?
- 3. Esiste uno schema URI universale per l'app di Facebook, che funziona su tutti i dispositivi mobili?
- 4. Test unità Laravel - Esegui tutti i test
- 5. Guice: come legare i generici per TUTTI i tipi?
- 6. Come confrontare i tipi di valore "Qualsiasi"
- 7. GWT TypeOracle.getTypes non restituisce tutti i tipi
- 8. Creazione/test di un'applicazione universale iPhone/iPad
- 9. Qual è la ragione per cui non tutti i tipi di valore sono annullabili?
- 10. AFNetworking accetta tutti i tipi di contenuto
- 11. I tipi privati sono visibili a tutti?
- 12. Ottieni tutti i tipi di immissione password
- 13. Come conservare la sessione attraverso tutti i test su phpunit?
- 14. DateTime.TryParse tutti i tipi di date possibili
- 15. Passaggio di funzioni per tutti i tipi applicabili intorno a
- 16. Codice EF Prima: Ottieni tutti i tipi POCO per DbContext
- 17. ColumnDefinition = "TEXT" per tutti i tipi di database
- 18. SCSS selettore/CSS per selezionare tutti i tipi di ingresso
- 19. Cerca ruby hash per valore vuoto
- 20. Qual è la newline universale per tutti i sistemi operativi? (LF e CR)
- 21. Come scrivere un'istanza per tutti i tipi in un'altra classe di tipi?
- 22. Filtro sfaccettatura Algolia per valore vuoto/nullo
- 23. Tutti i punti di valore y undefined su gnuplot
- 24. Ottenere valore predefinito per Java i tipi primitivi
- 25. sovraccarico su modelli di funzione per tutti i tipi di stringa
- 26. Implementazione della ricerca universale su binari 4
- 27. Elenca tutti i test trovati da Nosetest
- 28. Perché scrivere tutti i tag per assegnare uno stile è meglio che usare il selettore universale (*)?
- 29. Rimozione del testo in tutti i tipi di parentesi graffe
- 30. Come eseguire tutti i test in soluzione
Ottimo post sul blog! Perché suggerisci la soluzione basata su Scalaz? –
@NikitaVolkov: Non è necessario utilizzare Scalaz. Ho incluso un collegamento a "Zero.scala' in Scalaz e, come puoi vedere, è banale scrivere da solo. – missingfaktor