【问题标题】:What does type mismatch in scala mean and how do I fix it here?scala中的类型不匹配是什么意思,我该如何解决?
【发布时间】:2020-04-20 13:41:23
【问题描述】:

我正在尝试解决这个问题。

在名为“lecture”的包中创建一个名为“FirstObject”的object 使用名为“computeShippingCost”的方法,该方法采用Double 将包裹的重量表示为参数并返回 Double代表包裹的运费

• 超过 30 磅的运费为($)5 + 0.25

• 每个重量不超过 30 磅的包裹的运费为 5 美元

• 一个重 31 磅的包裹的运费为 5.25

• 一个重 40 磅的包裹的运费为 7.50

到目前为止,这是我的 scala 代码:

package lecture

object FirstObject {
  def computeShippingCost(weightOfpackage: Double): Double = {
    val shippingCost = 5
    if (weightOfpackage <= 30){
      return shippingCost
    }
    if (weightOfpackage >30){
      return (shippingCost) + (weightOfpackage - 30) * (.25)
    }

  }

  def main(args: Array[String]): Unit = {
    println(computeShippingCost(25.0)) // expect 5.0
  }
}

我不断收到一条错误消息,说

type: Mismatch, found:Unit, required: Double. 

在问题的上下文中这意味着什么?我该如何解决?

【问题讨论】:

    标签: scala


    【解决方案1】:

    computeShippingCost 中有一个未处理的情况 - 这将返回Unit。在 Scala 中,每个 if 都需要有一个 else。所以你的另一种情况是如果最后一个 if 不匹配。

    因此,您需要处理所有可能的情况。而且他们每个人都必须返回一个Double

    Scala 中的正确代码如下所示:

    def computeShippingCost(weightOfpackage: Double): Double = {
        val shippingCost = 5
        if (weightOfpackage <= 30){
          shippingCost
        } else {
          shippingCost + (weightOfpackage - 30) * 0.25
        } 
      }
    

    顺便说一句,Scala 中不需要 return

    看看这个解释:Return in Scala

    【讨论】:

    • 哦,谢谢,我不知道 scala 中不存在 return。前面代码中返回的单元没有处理哪种情况?
    • 哦,我才意识到我有一个又一个如果我不好
    • 好的,我在答案中添加了这个,并添加了一个进一步阅读的链接。
    • @indentation return 确实存在,但最好避免它。
    • @indentation 如果这解决了您的问题,请接受并投票赞成答案或添加评论缺少的内容。
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2013-08-11
    • 2013-12-08
    • 2016-02-04
    相关资源
    最近更新 更多