我如何定义一个关系,该关系指定在我的一般约束中T
支持Int
下标,以便此函数进行编译?
func index<T,U>(x:T) -> U {
return x[0] //Invalid capability as expected
}
我的第一个猜测是T[Int] == U
,我可以在其中指定的位置T
可以用anInt
和return索引U
,即:
func index<T,U where T[Int] == U>(x:T) -> U {
return x[0]
}
但是,这种组合语法不起作用。无论如何,我可以将这种关系指定为一般约束还是协议?
您可以使用实现下标功能的协议。例如:
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
func index<T:Container, U where U == T.ItemType>(x:T) -> U {
return x[0]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句