英文:
Fixing improperly referenced slices in an array replacement
问题
以下是代码的翻译版本:
// 以下的 Go 代码无法编译,因为(我认为)指针引用的方式存在错误。
// 特别地,错误信息如下:
// prog.go:13: cannot use append((*x)[:remove], (*x)[remove + 1:]...) (type []int) as type *[]int in assignment
// 这是一个抽象和简化版本的代码,会导致上述错误信息。
package main
import "fmt"
func main() {
x := &[]int{11, 22, 33, 44, 55, 66, 77, 88, 99}
for i, addr := range *x {
if addr == 22 {
for len(*x) > 5 {
remove := (i + 1) % len(*x)
x = append((*x)[:remove], (*x)[remove+1:]...)
}
break
}
}
fmt.Println(x)
}
希望对你有帮助!
英文:
The following go code doesn't compile, because (I believe) there is a mistake around the way pointers are being referenced.
In particular, The error message is
prog.go:13: cannot use append((*x)[:remove], (*x)[remove + 1:]...) (type []int) as type *[]int in assignment
Here is an abstracted and simplified version of the code which results in this error message.
package main
import "fmt"
func main() {
x := &[]int{11, 22, 33, 44, 55, 66, 77, 88, 99}
for i, addr := range *x {
if addr == 22 {
for len(*x) > 5 {
remove := (i + 1) % len(*x)
x = append((*x)[:remove], (*x)[remove+1:]...)
}
break
}
}
fmt.Println(x)
}
答案1
得分: 2
你在这里并没有使用数组,而是使用了切片。通常情况下,你不希望处理指向切片的指针,因为这可能会变得很麻烦,并且只有在非常少的情况下才需要使用指针。
要修复你的错误,请对 x
进行解引用:
*x = append((*x)[:remove], (*x)[remove+1:]...)
但是你可能应该直接使用切片值,这样就不需要解引用:
x := []int{11, 22, 33, 44, 55, 66, 77, 88, 99}
英文:
You're not using an array here, you're using a slice. Generally, you don't want to handle a pointer to a slice since it can get awkward, and the pointer is needed in very few cases.
To fix your error, dereference x
:
*x = append((*x)[:remove], (*x)[remove+1:]...)
But you should probably be using the slice value directly, so that no dereferences are required:
x := []int{11, 22, 33, 44, 55, 66, 77, 88, 99}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论