2015-01-14 4 views
8

È possibile verificare se la stringa è nullo o vuota utilizzando la corrispondenza?Pattern Matching per verificare se la stringa è nullo o vuota

Sto provando a fare qualcosa di simile:

def sendToYahoo(message:Email) ={ 
    val clientConfiguration = new ClientService().getClientConfiguration() 
    val messageId : Seq[Char] = message.identifier 
    messageId match { 
    case messageId.isEmpty => validate() 
    case !messageId.isEmpty => //blabla 
    } 
} 

ma ho un errore di compilazione.

Grazie in anticipo.

risposta

19

È possibile scrivere una semplice funzione come:

def isEmpty(x: String) = Option(x).forall(_.isEmpty) 

o

def isEmpty(x: String) = x == null || x.isEmpty 

si potrebbe anche voler tagliare la corda, se si considera " " essere vuoto pure.

def isEmpty(x: String) = x == null || x.trim.isEmpty 

e quindi utilizzarlo

val messageId = message.identifier 
messageId match { 
    case id if isEmpty(id) => validate() 
    case id => // blabla 
} 

o senza match

if (isEmpty(messageId)) { 
    validate() 
} else { 
    // blabla 
} 

o anche

object EmptyString { 
    def unapply(s: String): Option[String] = 
    if (s == null || s.trim.isEmpty) Some(s) else None 
} 

message.identifier match { 
    case EmptyString(s) => validate() 
    case _ => // blabla 
} 
+0

buona idea con la rifilatura! È così spesso dimenticato. – Madoc

+0

'no. esiste == forall' – sschaef

+0

@sschaef abbastanza giusto, grazie, l'ho aggiornato. –

6
def isNullOrEmpty[T](s: Seq[T]) = s match { 
    case null => true 
    case Seq() => true 
    case _ => false 
} 
+0

i progettisti di linguaggi Scala avrebbe reso i nostri nubies Scala vite molto più più facile fornendo un isNu trait llable con il metodo isNull come: def isNull [T] (obj: T) = obj partita { caso nulla => true caso _ => false } –

Problemi correlati