2016-04-28 33 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

开放案例是模拟的。