如何根据新值更新选项[A]的变量

时间:2015-12-30 15:50:35

标签: scala

很抱歉看起来似乎是一个Scala新手问题,但我可以说我有一个变量“minVal”,它是类中的Option [Int]。如果我得到一个更大的新观察,我需要更新该变量。实际上,我还有很多其他变量 - 例如,maxVal,minDates,maxDates,minLength,maxLength等。下面只是一个小片段。因此,除了Option [Int]之外,我还有Option [Date],Option [String],它们具有类似的更新要求。

我想知道是否有更好的方法来计算分钟。

var minVal:Option[Int] = None
def registerObs(x: Option[Int]) = {
  if (x.isDefined) 
    minVal match {
      case None                   => minVal = x
      case Some(mv) if mv < x.get => minVal = x
      case _ => 
    } 
}

提前致谢。

1 个答案:

答案 0 :(得分:3)

这样的事可能吗? minVal = (minVal ++ x).reduceOption(_ min _)

此外,您不应该为不同类型需要不同的功能。这样的事情应该足够了:

def minOpt[A](x: Option[A], y: Option[A])(implicit o: Ordering[A]) =
   (x ++ y).reduceOption { o.min(_,_) }

然后:

minVal = minOpt(minVal, x)
minDate = minOpt(minDate, d)
minString = minOpt(minString, s)