Не уверен, откуда эта ошибка типа - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь проверить свой код, и все, что я получаю, это ошибка типа.Я новичок в scala, но, насколько я могу судить, ide указывает на квадратную скобку.

Я вынул свою функцию из основной функции (не знаю, какова ее цель, новость дляобъектно-ориентированное программирование.) и я слишком много думал о моих объявлениях

class FirstObject {
  def computeShippingCosts(weight: Double): Double = {
    var init: Double = 5.0
    var overW: Double = weight - 30.0
    if (weight >= 30) {
      var total: Double = init + (overW * .25)
    } else {
      var total: Double = 5.0
    }
  }
  println(computeShippingCosts(31.0))
}

Я бы ожидал, что результат println будет 5.25, но ничего не печатается, кроме ошибки, поэтому я не знаю, что делать.

1 Ответ

0 голосов
/ 02 февраля 2019

Во-первых, не используйте return в Scala, это может привести к очень странным ошибкам.Последнее значение в функции будет результатом, поэтому нет необходимости в return.

. Вы получаете сообщение об ошибке, поскольку последнее значение равно val ..., а объявление не возвращает значение (или, скорее,он имеет значение Unit, которое является эквивалентом Scala void).

Также неплохо бы избегать if/else, если есть функция, которая может делать то же самое.В этом случае вы можете использовать max:

def computeShippingCosts(weight: Double): Double =
  math.max(5, weight*.25 - 2.5)

Я думаю, что это также выражает логику лучше, потому что она ясно дает понять, что есть вычисленная стоимость с минимальным значением.И это гарантирует, что более тяжелая посылка никогда не будет дешевле, чем более легкая посылка, которую сложнее гарантировать с помощью оригинальной логики.


Если вы хотите сохранить исходную форму кода, она выглядит следующим образом:

def computeShippingCosts(weight: Double): Double = {
  val init: Double = 5
  val overW: Double = weight - 30.0

  if (weight >= 30) {
    init + (overW*.25)
  } else {
    5.0
  }
}

Андрей дает альтернативную версию, которая более полезна, если вы рассматриваете расчет как базовую стоимость с превышением для товаров с избыточным весом:

def computeShippingCosts(weight: Double): Double =
  5 + 0.25*(weight - 30).max(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...