2017-07-05 2 views
-1

Ich habe einen Fall Klasse QueryParams wie folgt:Wie zu überprüfen, ob Fallklasse Parameterwert hat oder nicht in Scala

case class QueryParams(
limit: Option[Integer] = None, 
refresh: Option[Boolean] = None, 
organisationalUnit: Option[String] = None) 

Diese Werte limit, refresh, organisationalUnit sind url tatsächlich weitergegeben als Abfrageparameter in Anforderung für die Wiedergabe Anwendung. Ich muss einen Code schreiben, um zu überprüfen, ob die Anfrage-URL irgendeinen Wert für organisationalUnit enthält, und wenn ja, muss ich einen Fehler werfen. Wenn nein, muss ich mit weiteren Operationen fortfahren. Kann mir jemand helfen hier

+0

Was Sie bisher versucht haben? Zum Beispiel, googeln vielleicht? Blick auf 'Option' scaladoc? – Dima

Antwort

0

Option s sind recht gut für diese Art der Sache:

val params: QueryParams = ??? 

params.organizationalUnit.foreach(_ => throw new Exception("your error message")) 

Auf diese Weise können Sie nur werfen werde, wenn organizationalUnit definiert ist. Sie können auch wie folgt ausdrücken:

for (_ <- params.organizationalUnit) { 
    throw new Exception("your error message") 
} 

Oder alternativ:

if (params.organizationalUnit.isDefined) { 
    throw new Exception("your error message") 
} 

Letzteres ist wahrscheinlich die am besten lesen, auch wenn es nicht so sehr idiomatisch nach bestimmten Codierung Arten erkannt werden können.

+0

Dies ist eine nette gründliche Antwort. Ich füge nur hinzu, dass ich bezweifle, dass jemand mit der letzten Lösung ein großes Problem haben würde. Tatsächlich bevorzuge ich es definitiv. Normalerweise ist die Hauptsache zu vermeiden '.get', keine der anderen Methoden von' Option'. Obwohl es klingt, als hätte der Fragesteller etwas komplexere weitere Arbeit, die ein Verständnis oder etwas beinhalten sollte. –

0

Die Antwort von stefanobaghino gut ist, aber ich ziehe es Pattern-Matching für solche Fälle:

params.organisationalUnit match { 
    case Some(_) => // processing 
    case _ => //logging 
} 

Wenn Sie andere Werte benötigen, können Sie die ganze Instanz übereinstimmen

params match { 
    case QueryParams(Some(limit), Some(refresh), Some(organisationalUnit)) => 
    case QueryParams(mayBeLimit, mayBeRefresh, Some(organisationalUnit)) => 
    case _ => 
} 
Verwandte Themen