golang 发送一个 lambda 捕获组

我使用了很多 c++,并且在使用它时我经常使用 lambdas。Lambda 有

[<capturing group>](<parameters>) -> <return type> {}.

在 golang 我知道 lambdas 只是

var lambda_exp = func(<parameter list>) <return type> {}

但我怎样才能复制捕获组?


尚方宝剑之说
浏览 126回答 1
1回答

一只萌萌小番薯

C++ 有一大堆繁琐的东西需要控制:捕获了哪些变量他们的一生可能是怎样的它们是按价值还是按参考捕获的等等。这些带有大量复杂的规则,你作为程序员必须遵守;如果你不这样做,你的代码行为是未定义的。结果是只有 C++ 高手才能维护的非常不清晰的代码,以及终身的工作保障。1Go 缺乏所有这些复杂性。程序员被迫编写清晰而简单的代码:不会让读者感到困惑的代码。变量的生命周期由编译器和运行时自动计算。好吧,对我们程序员来说幸运的是,有一点复杂性。形式的循环:for i, item := range someslice {&nbsp; &nbsp; go func() {&nbsp; &nbsp; &nbsp; &nbsp; operateOn(i, &item)&nbsp; &nbsp; }()}只有一个名为 的(共享)变量item,因此每个生成的 goroutine 都在处理同一个项目,其值在每次循环时被覆盖。这意味着你必须写得不太清楚:for i, item := range someslice {&nbsp; &nbsp; item := item&nbsp; &nbsp; go func() {&nbsp; &nbsp; &nbsp; &nbsp; operateOn(i, &item)&nbsp; &nbsp; }()}(注意这i不是问题,因为它的值只是它的值,而不是指针;我在下面再次使用它)或者:for i, item := range someslice {&nbsp; &nbsp; go func(x T) {&nbsp; &nbsp; &nbsp; &nbsp; operateOn(i, &x)&nbsp; &nbsp; }(item)}在闭包内的局部变量中正确捕获项目。1如果不是很明显,我真的很高兴 Go 代码如此简单明了。我对 C++ 编程的终身工作保障方面至少有点讽刺。在许多情况下,这些繁琐的东西确实使 C++ 具有内存效率并且不需要运行时 GC,但这只是一场噩梦。这就是为什么 Rust 的所有权模型存在的原因,但 Rust 需要一些时间来适应。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go