不确定此类型错误来自何处

时间:2019-02-02 04:15:02

标签: scala intellij-idea

我正在尝试测试我的代码,我得到的只是一个类型错误。我是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 :(得分:1)

首先,不要在Scala中使用return,它会导致一些非常奇怪的错误。函数中的最后一个值将是结果,因此不需要return

由于上一个值为val ...并且声明没有返回值(或者它的值为Unit,它与{{1} )。

如果有一个函数可以做同样的事情,最好避免使用void。在这种情况下,您可以使用if/else

max

我认为这也更好地表达了逻辑,因为它清楚地表明存在一个具有最小值的计算成本。这样可以确保较重的包裹永远不会比较轻的包裹便宜,而采用原始逻辑很难保证。


如果要保留原始代码形式,则如下所示:

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

安德烈(Andrey)提供了一个替代版本,如果您将计算视为基本成本,而超重项目则超出了该成本,那么该版本更有意义:

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

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