Преобразование меток в GPA с использованием сопоставления с образцом в Scala - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь написать функцию Scala, которая принимает оценки и возвращает GPA на основе определенных критериев. Я использую сопоставление с образцом, но сопоставление с образцом работает, если регистр имеет одно значение, например, case 50 => 1, но я не могу получить желаемые результаты, как я хочу, например, возвращать GPA 1, если оценки равны или больше 50 и меньше 58 . Мой код здесь.

def convertor(marks : Int) : Int = marks match {
    case marks if marks < 50 => 0 
    case marks if marks >= 50 && marks < 58 =>  1
    case marks if marks >= 58 && marks < 70 =>  2
    case marks if marks >= 70 && marks < 85 =>  3
    case marks if marks >= 85  => 4
}

1 Ответ

2 голосов
/ 15 апреля 2019

Каждое case создает новую временную переменную, которая в данном случае вам на самом деле не нужна. Так что вы можете сделать это:

def convertor(marks : Int) : Int = marks match {
  case _ if marks < 50 => 0
  case _ if marks >= 50 && marks < 58 =>  1
  case _ if marks >= 58 && marks < 70 =>  2
  case _ if marks >= 70 && marks < 85 =>  3
  case _ if marks >= 85  => 4  
}

Или, как метко указывает @LeoC:

def convertor(marks : Int) : Int = marks match {
  case _ if marks < 50 => 0
  case _ if marks < 58 => 1
  case _ if marks < 70 => 2
  case _ if marks < 85 => 3
  case _               => 4  
}

Но это немного лучше, чем секвенирование if / else if тестов. Я был бы склонен попробовать что-то вроде этого:

def convertor(marks : Int) : Int =
  Seq(50, 58, 70, 85, Int.MaxValue).indexWhere(marks < _)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...