Как избежать возврата в скале - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть пример, подобный этому:

def demo(a: Int, b: Int, c:Int): Int = {
        if (a == 1)
          return 10
        if (b == 2)
          return 20
        if (c == 3)
          return 30
        40
      }

Код работает хорошо, но я знаю, что в Scala мы пытаемся избежать возврата .Поэтому я хотел бы спросить, есть ли другой способ избежать возвращения?Спасибо

Отредактировано Это реальный случай, который я получил, и я хотел бы избежать возврата.

post("/") {

if (product_id <= 0)
    return BadRequest(Map("ERROR" -> "PRODUCT_ID IS WRONG"))

if (file_id.isEmpty())
    return BadRequest(Map("ERROR" -> "FILE ID NOT FOUND"))

if (data_type.isEmpty())
    return BadRequest(Map("ERROR" -> "FILE TYPE NOT FOUND"))

if (data_type.get != "cvs")
    return BadRequest(Map("ERROR" -> "FILE TYPE IS WRONG"))

OK(Map("SUCCESS" -> "THANK YOU"))
}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы можете сделать что-то подобное для большого количества параметров:

def demo(ints: Int*) =
  ints.foldLeft((0, 1, 40)) { (acc, i) =>
      if (acc._2 == i && acc._1 == 0) (1, acc._2, i * 10)
      else (acc._1, acc._2 + 1, acc._3)
    }._3

Я не уверен, что его легко прочитать, но если у вас много аргументов, возможно, это что-то для рассмотрения.Некоторые объяснения: в foldLeft мы начинаем с (0, 1, 40) 0 - это индикатор, если мы нашли возвращаемое значение, 1 - это индекс в целых числах, а 40 - результат, если будет найдено другое возвращаемое значение, он будетбыть замененнымЕсли «демо» - это простой способ объяснить другую проблему, которую вы имеете, вы должны заменить условие и его результат в соответствии с вашей реальной проблемой.

0 голосов
/ 04 декабря 2018

Основной вариант будет использовать, если еще:

if (a == 1) 10 else if (b == 2) 20 else if (c == 3) 30 else 40

Другой вариант заключается в использовании сопоставления с образцом:

def demo(a: Int, b: Int, c: Int): Int = (a, b, c) match {
  case (1, _, _) => 10
  case (_, 2, _) => 20
  case (_, _, 3) => 30
  case _ => 40
}
...