尝试在最新的游乐场中编写具有泛型类型的堆栈时,出现了这个奇怪的错误。 我真的不明白这里有什么问题,有人可以向我解释为什么我会收到这个错误吗?
class MyStack<T> {
var stack1 = [T]()
func push<T>(value: T) {
stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T)'
}
}
答案 0 :(得分:1)
该类已经是通用的,也不需要推送泛型
class MyStack<T> {
var stack1 = [T]()
func push(value: T) {
stack1.append(value)
}
}
当push
声明为push<T>
时,泛型参数会覆盖在类上定义的参数。因此,如果我们要重命名通用参数,我们就会
class MyStack<T1> {
var stack1 = [T1]()
func push<T2>(value: T2) {
stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T2)'
}
}
这样表示,我们无法在T2
中推送[T1]
。