很抱歉看起来似乎是一个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 _ =>
}
}
提前致谢。
答案 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)