Int类型的表达式不符合预期的类型0

时间:2019-07-18 12:12:34

标签: scala intellij-idea

我有以下代码

object Solution {

  def solution(prices: Array[Int]): Int = {
    prices.foldLeft((prices.headOption.getOrElse(0), 0)) { (tuple, price) =>
      (Math.min(tuple._1, price), Math.max(tuple._2, price - tuple._1))
    }._2
  }
}

IntelliJ Idea突出显示Math.max(tuple._2, price - tuple._1),表示“类型为Int的表达式不符合预期的类型0”。

IntelliJ IDEA 2019.1.3(社区版),Ubuntu

Scala插件:v2019.1.9

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的foldLeft表达式的推断类型似乎是(Int, 0.type),其中0.typeliteral type,因为0在第二位置在此元组(prices.headOption.getOrElse(0), 0)中。

您碰巧使用了scala 2.13吗?这是已添加此功能的版本。

在我的机器上,IntelliJ突出显示代码,并显示与您相同的错误,但是我仍然可以运行该代码,因此,我认为这是intelliJ上的一个错误,该错误将类型推断为狭义。 / p>

另一个表达式Math.min(tuple._1, price)没有该错误,因为foldLeft的结果元组的第一个元素被推断为Int(由于表达式{{1} }。

如果您想摆脱prices.headOption.getOrElse(0)错误消息,可以使用IntelliJ

type ascription

def solution(prices: Array[Int]): Int = {
    prices.foldLeft[(Int, Int)]((prices.headOption.getOrElse(0), 0)) { (tuple, price) =>
      (Math.min(tuple._1, price), Math.max(tuple._2, price - tuple._1))
    }._2
  }