昨天在 swift-users 有人提問如何防止序列(sequence)為空。這個問題**於如何在斷言(predicate)中測試乙個序列,由此引發的問題是如果序列為空,會返回 true 來滿足斷言。
我們先不考慮這種處理是否有問題(我認為這種處理是正確的,因為乙個空序列裡沒有元素,對元素的斷言也就不會失敗),jeremy pereira 提出了乙個相當巧妙的解決方案:
func all(@noescape where predicate: generator.element throws -> bool) rethrows -> bool
count += 1
}return count > 0
}
但從此討論中延伸出的另乙個大問題是「如何優雅地判斷乙個序列是否為空?」。我的方法是用緩衝區(buffer)並進行預處理。以下是我的第一次嘗試,粗糙不堪,請不吝指教。
public struct bufferedsequence:generatortype, sequencetype
public mutating func next() -> base.generator.element?
}return bufferedelement
}public func isempty() -> bool
}
有趣的是,寫這個小東西最難的不是如何進行預處理,而是將 swift 3 的語法轉換回 swift 2.2,這樣我就能在 playground 中進行混編了。
你的語法轉換進行的怎樣了?已經全部轉換成 3 的語法了?還是堅守 2.2 寫生產**?
C 注意防止指標指向空
例子 static size t sn class employee employee const std string s name new std string s size t getid const std string getname const void print const empl...
Firebird如何防止空值擴散
在統計 計算 合併資料時,空值擴散問題,有時不經意冒出來,一不小心,就會導致結果出錯。我舉個例子。有乙個成績表achieve,有四個字段 yuwen shuxue yingyu total,分別用來儲存語文 數學 英語及總分。現在要計算學生的總分,現寫出如下sql語句 update achieve ...
在Firebird裡如何防止空值擴散
在統計 計算 合併資料時,空值擴散問題,有時不經意冒出來,一不小心,就會導致結果出錯。我舉個例子。有乙個成績表achieve,有四個字段 yuwen shuxue yingyu total,分別用來儲存語文 數學 英語及總分。現在要計算學生的總分,現寫出如下sql語句 update achieve ...