You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go是否支持匿名函数内仅单次执行函数调用而无需外部声明变量?

可以实现,你可以通过**立即执行匿名函数(IIFE)**的方案达成需求,不需要在外层作用域额外声明变量,效果和C++的lambda初始化捕获完全等价。

修改后的代码示例:

vec = filterVec(vec, func() func(int) bool {
    // findSomething 仅在此处执行1次
    preVal := findSomething(vec)
    return func(val int) bool {
        return useAsSomething(preVal)
    }
}())

实现原理

  • 外层的匿名函数会在作为参数传入filterVec前立刻执行,仅调用一次findSomething(vec)将结果存入局部变量preVal
  • 最终返回的内层匿名函数才是filterVec遍历数组时实际调用的回调,内层函数直接复用提前计算好的preVal,不会重复触发findSomething
  • 所有逻辑都封装在参数定义位置,不会在外层作用域产生额外变量,不会污染外层命名空间。

内容的提问来源于stack exchange,提问作者NoName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:15:02