我正在尝试编写一个函数,用于对各种 SequenceType 实现的迭代性能进行基准测试。它应该简单地对序列的内容求和,其中所有元素都是 Int
秒。我正在努力表达对函数的通用约束...
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’
受限于非协议(protocol)类型’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 - 如何为 SequenceType 实现通用求和函数,其中 Generator.Element 的类型为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676304/