我有以下代码
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
我做错了什么?
答案 0 :(得分:2)
您的foldLeft
表达式的推断类型似乎是(Int, 0.type)
,其中0.type
是literal 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
}