書中的任務說:不呼叫 reduce(_: _:) 方法,通過添加一個名為 sum 的計算屬性來對數字序列求和。您應該可以像這樣使用它:
[3, 7, 7].sum // 17
[8.5, 1.1, 0.1].sum // 9.7
作者提示:在開發人員檔案中檢查 Int 和 Double 符合哪些協議,以及這些協議從哪些協議繼承。在下面的代碼中,我只是結合了我找到的兩個解決方案,但它仍然包含方法 reduce。如果您可以幫助我了解如何解決此問題/開發人員檔案的哪一部分提供了線索。另外,如何避免當前代碼中的錯誤/在封閉范圍內應用可能的解決方案。
extension Sequence where Element: Numeric {
var sum: Any {
return reduce(0, )
}
}
[3, 7, 7].sum
[8.5, 1.1, 0.1].sum
[1...4].sum // Error: Property 'sum' requires that 'ClosedRange<Int>' conform to 'Numeric'
uj5u.com熱心網友回復:
[1...4].sum正在研究 ClosedRange 陣列([...]意思是“...的陣列”)。你的意思是:(1...4).sum。
你的意思也是:
var sum: Element { ... }
而不是Any.
如果你想讓它更通用,你可以通過這種方式從 Numeric 升級到 AdditiveArithmetic:
extension Sequence where Element: AdditiveArithmetic {
var sum: Element { reduce(.zero, ) }
}
這樣它就可以在向量之類的東西上作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417904.html
標籤:
上一篇:foreach帶有函式的陳述句
