假設您正在編寫一個對字符串進行規範化的類。該類有許多配置標誌。例如:基於標誌更新對象的功能方法
val makeLowerCase: Boolean = true
val removeVowels: Boolean = false
val dropFirstCharacter: Boolean = true
如果我寫可變代碼,我會寫的normalize
方法如下。
def normalize(string: String) = {
var s = string
if (makeLowerCase) {
s = s.toLowerCase
}
if (removeVowels) {
s = s.replaceAll("[aeiou]", "")
}
if (dropFirstCharacter) {
s = s.drop(1)
}
s
}
有沒有一種乾淨而簡單的方式來寫這些沒有突變?嵌套條件變得非常快。我可以創建一個String=>String
lambdas的列表,根據配置對其進行過濾,然後通過它摺疊字符串,但我希望有一些更容易的方法。
一個小功能中避免突變比可讀性重要得多。只要你的功能沒有產生外部副作用,你不應該擔心它。例如,不可能在沒有突變的情況下高效地進行排序,但只要您改變副本,功能外的任何人都無法區分。 – 2012-02-23 03:26:56