我不能重现这个问题,但你写这是一个相当尴尬的方式我。你想一切都是双重的,所以只要使它双重,然后代码变得更简单,你不需要所有的铸造。
pow(x,2)
x*x
,所以我会把它去掉,我认为代码会简单得多,而且编译绝对不会有任何问题。
func cal(xs: [Int], ys: [Int64]) -> Double {
let xs = xs.lazy.map(Double.init)
let ys = ys.lazy.map(Double.init)
let total = ys.reduce(0, +)
return zip(xs, ys).map { $0*$0 * $1 }.reduce(0, +) / total
}
如果你做了很多这样的代码,你可能会发现
sum()
扩展有助于使代码更清晰。
extension Sequence where Element: Numeric {
func sum() -> Element {
return reduce(0, +)
}
}
func cal(xs: [Int], ys: [Int64]) -> Double {
let xs = xs.lazy.map(Double.init)
let ys = ys.lazy.map(Double.init)
let total = ys.sum()
return zip(xs, ys).map { $0*$0 * $1 }.sum() / total
}