2015-12-30 58 views
0

對不起,似乎是一個斯卡拉新手問題,但可以說我有一個變量「minVal」,它是一個類中的Option [Int]。如果我得到一個更大的新觀察結果,我需要更新該變量。實際上,我有很多其他變量 - 例如,maxVal,minDates,maxDates,minLength,maxLength等。下面只是一小段代碼。所以除了Option [Int]之外,我還有Option [Date],Option [String],它具有類似的更新要求。如何更新基於新值的選項[A]的變量

我想知道是否有更好的方法來計算分鐘。

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 _ => 
    } 
} 

在此先感謝。

+2

讓說,相當的「非功能性」(副作用,可變性,...) – cchantep

+0

同意---可悲不起作用,但我需要記錄不同的事件。每個事件類型的類實例似乎是一個好方法。 – Bernie

+0

很少有*可以推薦這種方法的情況。 – cchantep

回答

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) 
+0

哇 - 頭腦風暴。謝謝!!!! – Bernie