Я пытаюсь выучить Scala с помощью калькулятора. В этом калькуляторе у меня есть два метода, в частности, для анализа и вычисления. У меня также есть два класса case, которые обрабатывают данные.
«Уникальная» структура данных - это просто составленный OperationIndex, который состоит из двух чисел и оператора, выполняющего их. Я сделал caseclass под названием numberPair, который просто содержит два числа, потому что я чувствую, что это легче понять таким образом. Пожалуйста, поправьте меня, если я ошибаюсь в этом, и если я должен просто использовать нормальную пару.
Компилятор scala жалуется, что строка
parser(data(element).numbers.number1, data(element).numbers.number2, data(element).operator)
возвращает Calculator.OperationIndex. Я не понимаю, он должен возвращать double, как указано в сигнатуре функции. Это также говорит о том, что он требует Int над двойным. Я прочитал документацию по Scala, но я все еще не уверен, где я ошибся.
case class NumberPair(number1: Double, number2: Double)
case class OperationIndex(numbers: NumberPair, operator: String)
def parser(number1: Double, number2: Double, operator: String): Double = {
val result = operator match {
case "+" => number1 + number2
case "-" => number1 - number2
case "/" => number1 / number2
case "*" => number1 * number2
}
result
}
def computeValue(data: List[OperationIndex]): Double = {
data.foldLeft(0.0) {
(acc: Double, element: OperationIndex) =>
acc + parser(data(element).numbers.number1, data(element).numbers.number2, data(element).operator)
}
}