D语言中的Lambda值捕获 在C++中,我可以创建两个lambda,每个λ都是通过定义λ定义时的值来捕获的。 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"; }
然而,在D中,我似乎能做的就是:D语言中的Lambda值捕获 在C++中,我可以创建两个lambda,每个λ都是通过定义λ定义时的值来捕获的。 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"; },d,D,然而,在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)); } 它产生输出: An
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
<>在C++中有任何一种方法来捕获值,类似于在C++中使用<代码> [[] ] /代码>,在手册中我似乎找不到答案,所以如果有一种方法可以理解,那么我就可以理解我所遗漏的东西。< /P> < P>你可以做一个新的变量: 在循环中,这意味着:
for(int i; i<10;i++){
auto index = i;
storeFunction((int x){ return index;});
}
for(int i;i如果使用辅助函数,则可以“捕获”乘数值:
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));
}
我相信D没有这样的功能。啊,这当然可以解释为什么我找不到它。传递到storeFunction
的委托不会有自己的索引副本。因此它不符合OP的要求。如果你喜欢,你也可以内联定义帮助程序。我在Javascript和D中使用这种技术。谢谢,这是似乎最接近我想要的。
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));
}