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
相关产品推荐
相关产品推荐

