gpt4 book ai didi

pointers - 将 reflect.AppendSlice 的结果分配给指针

转载 作者:数据小太阳 更新时间:2023-10-29 03:05:39 25 4
gpt4 key购买 nike

我在将这段代码(实际上是在 slice 上左旋转)翻译成接受 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 的值为 interface{},因此 *a = 会将右侧的值分配给指针所在的空间指向。不过,我对 AppendSlice 的调用返回了 Value。我不确定类型断言需要在哪里发生,我想是在左侧吗?

最佳答案

a 是一个接口(interface){},而不是指针,因此您不能取消引用它。即使你有一个指向 slice 的指针,你也不能分配 reflect.AppendSlice 的结果,因为它返回类型 reflect.Value。您需要通过 Value.Set 设置值.

https://play.golang.org/p/JCF8jsRJ_O

func rotateSlice(a interface{}, i int) {
v := reflect.ValueOf(a).Elem()
x, b := v.Slice(0, i), v.Slice(i, v.Len())
v.Set(reflect.AppendSlice(b, x))
}

关于pointers - 将 reflect.AppendSlice 的结果分配给指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com