為了使我的問題更精確,我將介紹一個 C 代碼片段:
int findSomething(const std::vector<int>& 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<int> 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只呼叫一次而不用以下捕獲在外部宣告變數?
uj5u.com熱心網友回復:
Go 中沒有明確的捕獲語法。您必須在外部宣告預先計算的變數,然后才能隱式捕獲它。
x := findSomething(vec)
vec = filterVec(vec, func(val int) bool {
return useAsSomething(x, val)
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343556.html
標籤:走
