2016-04-28 55 views
0

我有一個原料處理,我想,以防止再次進行數據處理,如果更新的值是一樣的前值,所以我有這樣如何防止一些代碼重複用於飼料處理

map.get(statisticsOpenAcronym).map { x => 
    var open = x.asInstanceOf[Number].doubleValue(); 
    if (statistics.open != open) { 
    statistics.open = open; 
    statistics.changed = true; 
    } 
} 
map.get(statisticsCloseAcronym).map { x => 
    var close = x.asInstanceOf[Number].doubleValue(); 
    if (statistics.close != close) { 
    statistics.close = close; 
    statistics.changed = true; 
    } 
} 
代碼

但是,我需要[如果xxx是不同的,更新xxx和設置更改標誌]一次又一次地複製。

只是想知道,我該如何防止這種情況?

回答

0

您可以撰寫的功能(我不得不改變一些事情,因爲我不知道你的類型):

case class Statistic() { 
    var open = true 
    var close = !open 
    var changed = false 
} 

var statistics = Statistic() 


def f(map: Map[String, String], statisticsOpenAcronym: String, statistic: Statistic, condition: Statistic => Boolean, exec: (Statistic, Boolean) =>()) = { 
    map.get(statisticsOpenAcronym).map { x => 
    val close = x.asInstanceOf[Boolean] 
    if (condition(statistic)) { 
     exec(statistic, close) 
    } 
    } 
} 


def closeCondition(): Statistic => Boolean = { statistics: Statistic => 
    statistics.close 
} 

def closeStatistic(): (Statistic, Boolean) => Unit = { (statistics: Statistic, close: Boolean) => 
    statistics.close = close 
    statistics.changed = true; 
} 


f(Map.empty, "acronym", statistics, closeCondition(), closeStatistic()) 

更重要的是你可以做closeStatistics回報你想要的,而不是參數的新的統計信息Unit

開放案例是模擬的。