Я анализирую три параметра запроса, все из которых завернуты в тип Option
. Если какой-либо из этих опций - None
, то я хочу вернуть ошибку 400. Как проверить, имеет ли какое-либо из этих возвращаемых значений тип None
?Множественные значения опций в Scala
6
A
ответ
14
Почему бы не просто так?
if (o1.isEmpty || o2.isEmpty || o3.isEmpty) BadRequest("Foo")
Альтернатива в зависимости от вашей реализации может иметь свои варианты в какой-то коллекции. Тогда вы могли бы использовать exists
if (parsedRequestParameters.exists(_.isEmpty)) BadRequest("Foo")
Третий альтернативный вы могли бы, в случае, если вы хотите сделать что-то с содержимым ваших вариантов:
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
Я предпочитаю работать с ними как с коллекцией варианта [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
Вы также можете использовать почтовый индекс, но он будет обернуть основной элементы в послед вложенных пар, которые не легко выравниваться для повторного использования
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()
или вы могли бы сделать что-то вроде этого
val options = Seq(Some(p1), Some(p2), Some(p3),None)
val parameters = options.flatten
if(parameters.length == options.length) do something with parameters
1
Для полноты на exists
над коллекцией Option
, рассмотрим также forall
, как следует,
val a = Array(Some(3), None, Some(7))
a.forall(_.nonEmpty)
res: false
a.forall(!_.isEmpty)
res: false
a.forall(_.isDefined)
res: false
и
val b = Array(Some(3), Some(5), Some(7))
b.forall(_.nonEmpty)
res: true
b.forall(_.isDefined)
res: true
6
Еще одна возможность, добавленная для полноты:
(o1, o2, o3) match {
case(Some(p1), Some(p2), Some(p3)) => Ok // Do stuff with p1, p2, p3
case _ => BadRequest
}
Смежные вопросы
- 1. Множественные списки опций динамического выбора
- 2. Составьте список опций в Scala
- 3. Значения опций в JOptionPane
- 4. Scala для понимания и опций
- 5. Scala Slick 3.1 множественные соединения
- 6. Scala представляет собой набор опций
- 7. Scala Sugar для опций Seq
- 8. Добавить JSON в значения опций
- 9. Динамически установить значения опций
- 10. Заменить значения опций
- 11. Множественные максимальные значения в запросе
- 12. Множественные возвращаемые значения в ANTLR
- 13. Множественные значения замещения в python3
- 14. jQuery Выбранные значения опций
- 15. получить значения пользовательских опций
- 16. Получить значения опций gdb
- 17. Значения опций добавления Javascript
- 18. Сравнить множественные значения SQL
- 19. Множественные флажки Значения
- 20. Фильтры SSRS Множественные значения
- 21. Множественные значения параметров
- 22. Пустые множественные значения UILabel
- 23. Формат опционального значения опций
- 24. MATLAB Множественные максимальные значения
- 25. Эффективные множественные возвращаемые значения
- 26. Простейший способ извлечения опций из коллекций Scala
- 27. Scala: числовые операции по типу опций
- 28. Операция «tee» по типу опций Scala?
- 29. scala: сложный flatMap на корте из опций
- 30. Scala Пересечение списка и списка опций
Какой маршрутизатор вы используете? Скорее всего, вы можете просто сделать три параметра обязательными. –