我对用于协议的关联类型的语法与另一方面的泛型类型之间的区别感到困惑.
例如,在Swift中,可以使用类似的东西定义泛型类型
struct Stack<T> {
var items = [T]()
mutating func push(item: T) {
items.append(item)
}
mutating func pop() -> T {
return items.removeLast()
}
}
Run Code Online (Sandbox Code Playgroud)
而一个使用类似的东西定义一个具有相关类型的协议
protocol Container {
typealias T
mutating func append(item: T)
var count: Int { get }
subscript(i: Int) -> T { get }
}
Run Code Online (Sandbox Code Playgroud)
后者为什么不是:
protocol Container<T> {
mutating func append(item: T)
var count: Int { get }
subscript(i: Int) -> T { get }
}
Run Code Online (Sandbox Code Playgroud)
是否存在一些深层次(或者可能只是显而易见并且迷失在我身上)的原因,即语言没有采用后一种语法?