# #go
Вопрос:
Чтобы сделать мой вопрос более точным, я собираюсь представить фрагмент кода на C :
int findSomething(const std::vectorlt;intgt;amp; 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::vectorlt;intgt; vec = {1, 2, 3, 4, 5, 6}; auto lambda = [val = findSomething(vec, 5)] { // findSomething is invoked only once return useAsSomething(val); }; std::cout lt;lt; lambda(); }
Я хотел бы сделать то же самое с Go:
vec = filterVec(vec, func(val int) bool { return useAsSomething(findSomething(vec)) })
В этом случае findSomething
вызывается столько, сколько, len(vec)
но я не хочу повторять вызов. Можно ли вызвать findSomething
только один раз без объявления переменной снаружи с последующим захватом?
Ответ №1:
В Go нет явного синтаксиса захвата. Вы должны объявить предварительно вычисленную переменную снаружи, тогда она может быть захвачена неявно.
x := findSomething(vec) vec = filterVec(vec, func(val int) bool { return useAsSomething(x, val) })