如何为 Generator.Element 类型为 Int 的 SequenceType 实现通用求和函数
How to implement generic sum function for SequenceType where Generator.Element is of type Int
我正在尝试编写一个函数,用于对各种 SequenceType 实现的迭代性能进行基准测试。它应该简单地对序列的内容求和,其中所有元素都是 Int
s。我正在努力表达对函数的通用约束...
func sum<S: SequenceType where S.Generator.Element: Int>(s: S) -> Int {
var sum = 0
for i in s {
sum += i
}
return sum
}
这会导致以下两个错误:
- 类型
‘S.Generator.Element’
限制为非协议类型’Int’
- 二元运算符
'+=‘
不能应用于 ’Int'
和 ’S.Generator.Element’
类型的操作数
有没有办法定义此函数以在任何 SequenceType
实现上工作,其中的元素专门用于 Int
?
约束应该是S.Generator.Element == Int
:
func sum<S: SequenceType where S.Generator.Element == Int>(s: S) -> Int {
var sum = 0
for i in s {
sum += i
}
return sum
}
整数类型稍微更通用:
func sum<S: SequenceType, T : IntegerType where S.Generator.Element == T >(s: S) -> T {
var sum : T = 0
for i in s {
sum += i
}
return sum
}
Swift 3.1 的更新版本:
func sum<S: Sequence>(_ s: S) -> Int where S.Iterator.Element == Int {
return s.reduce(0){[=10=] + }
}
我正在尝试编写一个函数,用于对各种 SequenceType 实现的迭代性能进行基准测试。它应该简单地对序列的内容求和,其中所有元素都是 Int
s。我正在努力表达对函数的通用约束...
func sum<S: SequenceType where S.Generator.Element: Int>(s: S) -> Int {
var sum = 0
for i in s {
sum += i
}
return sum
}
这会导致以下两个错误:
- 类型
‘S.Generator.Element’
限制为非协议类型’Int’
- 二元运算符
'+=‘
不能应用于’Int'
和’S.Generator.Element’
类型的操作数
有没有办法定义此函数以在任何 SequenceType
实现上工作,其中的元素专门用于 Int
?
约束应该是S.Generator.Element == Int
:
func sum<S: SequenceType where S.Generator.Element == Int>(s: S) -> Int {
var sum = 0
for i in s {
sum += i
}
return sum
}
整数类型稍微更通用:
func sum<S: SequenceType, T : IntegerType where S.Generator.Element == T >(s: S) -> T {
var sum : T = 0
for i in s {
sum += i
}
return sum
}
Swift 3.1 的更新版本:
func sum<S: Sequence>(_ s: S) -> Int where S.Iterator.Element == Int {
return s.reduce(0){[=10=] + }
}