我很难将这段代码(实际上是切片上的左旋转)翻译成更通用的版本,该版本接受interface{}
作为输入参数。
func rotate(a *[]int, i int) {
x, b := (*a)[:i], (*a)[i:]
*a = append(b, x...)
}
我在最后的作业中遇到了麻烦:
func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a)
x, b := v.Elem().Slice(0, i), v.Elem().Slice(i, v.Elem().Len())
*a = reflect.AppendSlice(b, x)
}
错误消息是invalid indirect of a (type {})
。a
is的值interface{}
,因此*a =
将右手值分配给指针指向的空间。我的电话虽然AppendSlice
返回。Value
我不确定类型断言需要在哪里发生,我想在左侧?