Analizuję trzy parametry żądania, z których wszystkie są zawijane w typie Option
. Jeśli któraś z tych opcji to None
, wówczas chcę zwrócić błąd 400. Jak sprawdzić, czy którekolwiek z tych zwracanych wartości są typu None
?Wiele wartości opcji w Scala
6
A
Odpowiedz
14
Dlaczego po prostu tak nie jest?
if (o1.isEmpty || o2.isEmpty || o3.isEmpty) BadRequest("Foo")
Alternatywna zależnie od wdrożenia, możesz mieć opcje w jakiejś kolekcji. Następnie można użyć exists
if (parsedRequestParameters.exists(_.isEmpty)) BadRequest("Foo")
trzecim alternatywnym może chcesz, w przypadku, gdy chcesz coś zrobić z treścią opcji:
val response = for {
v1 <- o1
v2 <- o2
v3 <- o3
} yield <some response depending on the values of o1..o3>
response getOrElse BadRequest("something wasn't specified")
2
Wolę pracować z nimi jak z kolekcji opcji [T]
scala> Seq(Option(1), Option(5), None)
res0: Seq[Option[Int]] = List(Some(1), Some(5), None)
scala> val result = res0.exists(_.isEmpty)
result: Boolean = true
0
można również użyć zip, ale będzie to owinąć bazowych elementów w nast zagnieżdżonych par, które nie są łatwe do spłaszczyć do ponownego użycia
Some(1) zip Some(2) == List((1,2))
Some(2) zip Some(2) zip Some(3) == List(((1,2),3))
Some(1) zip Some(2) zip None == List()
czy można zrobić coś takiego
val options = Seq(Some(p1), Some(p2), Some(p3),None)
val parameters = options.flatten
if(parameters.length == options.length) do something with parameters
1
dla kompletności na exists
nad kolekcją Option
, należy rozważyć również forall
, jak następuje,
val a = Array(Some(3), None, Some(7))
a.forall(_.nonEmpty)
res: false
a.forall(!_.isEmpty)
res: false
a.forall(_.isDefined)
res: false
i
val b = Array(Some(3), Some(5), Some(7))
b.forall(_.nonEmpty)
res: true
b.forall(_.isDefined)
res: true
6
Inna możliwość, dodana do kompletności:
(o1, o2, o3) match {
case(Some(p1), Some(p2), Some(p3)) => Ok // Do stuff with p1, p2, p3
case _ => BadRequest
}
Powiązane problemy
- 1. Wiele wartości w Scala
- 2. Wiele wartości dla wielu wartości scala
- 3. Ograniczanie opcji w scala?
- 4. Łączenie opcji Scala [Iterable [_]]
- 5. C# wiele opcji wysyłki?
- 6. "jest" C# wiele opcji
- 7. wybrać wiele opcji w szynach collection_select
- 8. JQuery: Ukrywanie opcji wybierz według wartości opcji
- 9. jquery mobile - ustaw wartości opcji/opcji
- 10. Obiekt opcji Scala wewnątrz innego obiektu Option
- 11. Wiele opcji uwierzytelniania z Tornadem
- 12. Wiele opcji ListView i SharedPreferences
- 13. Scala wiele niejawnych konwersji?
- 14. Wiele grup przycisków opcji w jednym formularzu
- 15. Scala lift framework, formularz ajax, który przesyła wiele wartości?
- 16. Czy istnieje rubinowy odpowiednik opcji Scala?
- 17. Przykłady użycia niektórych metod opcji Scala
- 18. Jak prawidłowo używać Hashmapów i Opcji Scala?
- 19. Ograniczanie wartości opcji wiersza poleceń
- 20. Get wybranej wartości opcji w przypadku zmiany
- 21. Inicjalizacja wartości Scala
- 22. Zwiększanie wartości Scala mapie
- 23. Spree listy rozwijane dla wariantów wartości opcji
- 24. Scala Slick 3.1 wiele dołączeń
- 25. akceptuje wiele typów dla parametru w scala
- 26. Scala sbt: Wiele zależności w sbt
- 27. JQuery ustawia wiele opcji rozwijanych dla wybranych
- 28. Wiele wartości max w zapytaniu
- 29. wiele wartości zwrotu w funkcji
- 30. Wiele argumentów opcji za pomocą getopts (bash)
jakiego router używasz? Możliwe, że po prostu trzy parametry będą obowiązkowe. –