登录
首页 >  Golang >  Go问答

Go 语言是否只允许匿名函数中的函数调用一次?

来源:stackoverflow

时间:2024-02-22 21:48:21 360浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《Go 语言是否只允许匿名函数中的函数调用一次?》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

为了使我的问题更加精确,我将引入一个 c++ 代码片段:

int findsomething(const std::vector& v, int val) {
    auto it = std::find(v.begin(), v.end(), val);
    return it == v.end() ? 0 : *it;
}

bool useassomething(int val) {
    return val != val;
}

int main() {
    std::vector vec = {1, 2, 3, 4, 5, 6};

    auto lambda = [val = findsomething(vec, 5)] { // findsomething is invoked only once
        return useassomething(val);
    };

    std::cout << lambda();
}

我想用 go 做同样的事情:

vec = filterVec(vec, func(val int) bool {
        return useAsSomething(findSomething(vec))
    })

在这种情况下, findsomething 被调用的次数与 len(vec) 一样多,但我不想重复调用。是否可以仅调用 findsomething 一次,而无需通过以下捕获在外部声明变量?


正确答案


go 中没有明确的捕获语法。您必须在外部声明预计算变量,然后才能隐式捕获它。

x := findSomething(vec)
vec = filterVec(vec, func(val int) bool {
    return useAsSomething(x, val)
})

今天关于《Go 语言是否只允许匿名函数中的函数调用一次?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>