Go语言匿名函数闭包中如何解决函数值相同问题?

ID:21143 / 打印

go语言匿名函数闭包中如何解决函数值相同问题?

go语言晚绑定与匿名函数闭包

在go语言中,匿名函数闭包是一个常见的概念。然而,在创建数组并填充匿名函数时,可能会面临函数值相同的闭包问题。

当创建一个包含void -> int类型函数的空数组时,每个匿名函数的值都会相同,这是因为循环变量i在离开循环块后就无法访问。这与许多编译型语言一致。

go语言采用晚绑定来解决闭包问题。这意味着函数的变量引用将在运行时而不是编译时解析。通过将循环变量作为匿名函数的参数,可以保存每次循环的值。

立即学习“go语言免费学习笔记(深入)”;

除了一楼的方式外,还可以通过更改数组函数声明和传入入参的方式解决这个问题:

package main  import "fmt"  const ls_size int = 5  func main() {     // 创建空数组     var fns [ls_size]func(x int) int    // 更改此处数组函数声明     // 循环     for i := 0; i < ls_size; i++ {         fns[i] = func(i int) int {        // 有入参             return i         }     }     for n := 0; n < ls_size; n++ {         fmt.printf("fns[%d]: %d ", n, fns[n](n))    // 带入入参     } }

通过这种方式,每个匿名函数都可以包含一个唯一的循环变量值,从而解决闭包问题,输出如下:

fns[0]: 0 fns[1]: 1 fns[2]: 2 fns[3]: 3 fns[4]: 4
上一篇: 云VPS托管:优化Python开发环境的关键
下一篇: 如何解决使用 pip 安装 torch-tensorrt 时出现的 &quot;error: subprocess-exited-with-error&quot; 错误?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。