【发布时间】:2013-11-24 15:35:03
【问题描述】:
def doubleList(noList:List[Int]) = {
val result = noList.map{ number =>
number*2
}
result
}
def halfList(noList:List[Int]) = {
val result = noList.map{ number =>
number/2
}
result
}
def mapFunctionDRY(noList:List[Int])(codeBlock: () => Int) = {
}
println(halfList(List(1,2,3)))
println(doubleList(List(1,2,4)))
我在玩 scala 并注意到在上述两个函数 doubleList 和 halfList 中违反了 DRY(不要重复自己)。我希望两个函数中的通用代码被隔离,并且只传递不同的代码块。这样我的代码就不会违反 DRY 原则。我知道您可以将代码块作为 scala 中的参数传递。这就是我打算在mapFunctionDRY做的事情
我希望mapFunctionDRY是这样的
def mapFunctionDRY(noList:List[Int])(codeBlock: () => Int) = {
noList.map{ number =>
codeBlock()
}
}
doubleList 和 halfList 中的代码与此类似
def doubleList(noList:List[Int]) = { mapFunctionDRY(noList){ () => number*2 } }
但如果我这样做,我会得到一个编译错误。在这种情况下如何使代码作为参数传入以避免违反 DRY。可以进一步减少此代码以使其保持干燥吗?
【问题讨论】: