gpt4 book ai didi

go - 递归函数中的阴影参数

转载 作者:行者123 更新时间:2023-12-01 22:27:46 27 4
gpt4 key购买 nike

var f func(a *x, b int)
f = func(a *x, b int) {
// a and b are changed here.
if ... {
return
}
for ... {
c := new(x)
*c = *a
f(c, b)
}
}

该代码说明了我的程序的结构。

我希望在返回语句之后,将参数重置为递归函数调用之前的状态,并且循环将继续进行下一次迭代。

令我惊讶的是,调试器将期望值标记为阴影,程序继续执行由递归调用设置的操纵值。

如何实现预期的行为?

先感谢您。

最佳答案

如果x类型包含任何指针类型,则在递归调用中更新指针类型时也必须将其复制。例如,如果x看起来像这样:

type x struct {
d *y
}

您将需要同时更新x和y。
c := new(x)
*c = *a
d := new(y)
*c.d := *d

更好的策略可能是消除问题中的所有指针。如果 a的类型为 xd的类型为 y,则 f(a, b)将在调用时复制两个值。

关于go - 递归函数中的阴影参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58891848/

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