我有一个基本的lambda,如下所示:
auto l = [](){
int i = 0;
cout << i++;
}
多次打电话,将继续打印0.如何保留我?我可以不用仿函数吗?
答案 0 :(得分:14)
根据您对此lambda的处理方式,您可以考虑以下替代方法:
[]() { static int i = 0; cout << ++i << ' '; };
使用1 2 3 4
代替将导致打印序列heroku run scrapy crawl spider
。
答案 1 :(得分:13)
尝试将lambda视为具有#include <iostream>
auto l = [i=0]()mutable{
std::cout << i++;
};
auto l2=l;
int main(){
l(); // 0
l(); // 1
l(); // 2
l2(); // 0
l2(); // 1
l(); // 3
std::cout << '\n';
}
的类。你如何在课堂上保留国家?有一个成员。捕获与此相当。
$(document).ready(function() {
//some even that will run ajax request - for example click on a button
var uname = $('#username').val();
$.ajax({
type: 'POST',
url: 'func.php', //this should be url to your PHP file
dataType: 'html',
data: {func: 'toptable', user_id: uname},
beforeSend: function() {
$('#right').html('checking');
},
complete: function() {},
success: function(html) {
$('#right').html(html);
}
});
});
And your func.php:
function toptable()
{
echo 'something happens in here';
}
答案 2 :(得分:5)
auto l = [](){
static int i = 0;
// ^^^^^^
cout << i++;
}
应该解决您的问题。
通常,在不使用本地static
变量的情况下,函数不能保留内部状态。实际上使用lambdas没有区别。
如果要计算副本,可以使用普通的仿函数类实现@Revolver_Ocelot suggested。
答案 3 :(得分:2)
如果您希望i
保留其值,则有三个选项:
i
声明为全局变量(错误)。i
的前一个值传递给函数(更好)。将i
声明为static
变量(最佳)。
auto l = []() { static int i = 0; cout << i++ << endl; };
l(); l(); l();
这将作为输出:
0
1
2