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语言中的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

然而,在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

<>在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));
}