D语言中按值捕获的lambda
Lambda capture by value in D language
在 C++ 中,我可以创建两个 lambda,每个 lambda 在定义 lambda 时按值捕获 a 的值。
int main()
{
int a;
a = 4;
auto f1 = [=](int x) { return x * a; };
a = 6;
auto f2 = [=](int x) { return x * a; };
std::cout << "Answer 1 is " << f1(10) << "\n";
std::cout << "Answer 2 is " << f2(10) << "\n";
}
运行的结果是:
Answer 1 is 40
Answer 2 is 60
但是在 D 中,我似乎只能这样做:
import std.stdio;
void main()
{
int a;
a = 4;
auto f1 = (int x){ return x * a;};
a = 6;
auto f2 = (int x){ return x * a;};
writeln("Answer 1 is ", f1(10));
writeln("Answer 2 is ", f2(10));
}
产生输出:
Answer 1 is 60
Answer 2 is 60
是否有任何 way/syntax 可以在 D 中按值捕获值,类似于在 C++ 中使用 [=]
,我似乎无法在手册中找到答案,所以如果有办法link 将不胜感激,这样我就可以理解我错过了什么。
你可以做的是引入一个新变量:
在循环中这意味着:
for(int i; i<10;i++){
auto index = i;
storeFunction((int x){ return index;});
}
如果您使用的是辅助函数,您可以'capture'乘数值:
auto multiplier(int m) {
return (int x){ return x * m;};
}
void main()
{
int a;
a = 4;
auto f1 = multiplier(a);
a = 6;
auto f2 = multiplier(a);
writeln("Answer 1 is ", f1(10));
writeln("Answer 2 is ", f2(10));
}
在 C++ 中,我可以创建两个 lambda,每个 lambda 在定义 lambda 时按值捕获 a 的值。
int main()
{
int a;
a = 4;
auto f1 = [=](int x) { return x * a; };
a = 6;
auto f2 = [=](int x) { return x * a; };
std::cout << "Answer 1 is " << f1(10) << "\n";
std::cout << "Answer 2 is " << f2(10) << "\n";
}
运行的结果是:
Answer 1 is 40
Answer 2 is 60
但是在 D 中,我似乎只能这样做:
import std.stdio;
void main()
{
int a;
a = 4;
auto f1 = (int x){ return x * a;};
a = 6;
auto f2 = (int x){ return x * a;};
writeln("Answer 1 is ", f1(10));
writeln("Answer 2 is ", f2(10));
}
产生输出:
Answer 1 is 60
Answer 2 is 60
是否有任何 way/syntax 可以在 D 中按值捕获值,类似于在 C++ 中使用 [=]
,我似乎无法在手册中找到答案,所以如果有办法link 将不胜感激,这样我就可以理解我错过了什么。
你可以做的是引入一个新变量:
在循环中这意味着:
for(int i; i<10;i++){
auto index = i;
storeFunction((int x){ return index;});
}
如果您使用的是辅助函数,您可以'capture'乘数值:
auto multiplier(int m) {
return (int x){ return x * m;};
}
void main()
{
int a;
a = 4;
auto f1 = multiplier(a);
a = 6;
auto f2 = multiplier(a);
writeln("Answer 1 is ", f1(10));
writeln("Answer 2 is ", f2(10));
}