scala - 整数列表在scala中可以为空时的最小值

标签 scala typechecking

当整数列表可以为空时,我也试图找到它的最小值。

scala> val minValue:Int = List() match {
     |   case Nil => -1
     |   case xs  => xs.min
     | }
<console>:9: error: diverging implicit expansion for type Ordering[B]
starting with method Tuple9 in object Ordering
     case xs => xs.min

虽然它运行良好,但不是非空列表。
scala> val minValue = List(1,2) match {
     |   case Nil => -1
     |   case xs  => xs.min
     | }
minValue: Int = 1

我如何在没有排序的情况下找到 min 作为我能想到的一种方法是排序并使用 getOrElse defaultValue 进行排序。

最佳答案

问题是类型检查器不知道使用什么类型 List() .如果您专门使用类型注释空列表,它应该可以正常工作:

val minValue:Int = List.empty[Int] match { // ...

在与@senia 讨论后,我意识到您可能将 -1 用作“黑客”来表示“无最小值”而不是实际值。如果是这种情况,请使用 Option在 Scala 中输入可能更清楚,因为您可以返回 Some实际结果的变体和 None空列表情况下的变体。 Scala 序列实际上已经为您提供了一个很好的方法:
scala> List.empty[Int].reduceLeftOption(_ min _)
res0: Option[Int] = None

scala> List(5, 2, 1, 3, 4).reduceLeftOption(_ min _)
res1: Option[Int] = Some(1)

关于scala - 整数列表在scala中可以为空时的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663235/

相关文章:

c - 强大的 typedef 静态检查器 (unix)

C# 运行时错误 : InvalidCastException with Generic Class Instance

Scala:从 mixin 类型别名继承时为 "class type required but {trait} with {trait} found"

python - 这是在 Python 中检查类型的一个好理由吗?

Scala 库和框架

java - Apache Spark MLlib : OLS regression in Java

generics - 当列表文字的元素与声明的泛型类型不匹配时,不会报告类型错误。为什么?

java - 如何在java中转换之前检查类型

web-services - 如何在 Play Framework scala ws 调用中忽略 ssl 验证

scala - HList 上的映射因 Scala 和 Shapeless 中的泛型类型的子类型而失败