D语言嵌套函数类型推断

3

有人知道subj是否会被实现吗? 至少,它们会有自动存储类吗? 谢谢!


2
请更具体一些。您所说的“subj”是什么意思? - Jonathan M Davis
我的意思是,constr. void foo(){ auto bar() { return 3.14; }; }不会编译,因为bar不能具有自动存储类。我只是好奇是否计划至少进行这种增强。 - Target-san
1个回答

4
一般来说,自动功能存在各种问题,因此很可能您无法执行该操作。
void main()
{
    auto bar() { return "hello world"; }

    writeln(bar());
}

由于自动类型存在错误,而不是按设计进行。我不确定具体的计划是什么,但我认为您应该能够将auto用作嵌套函数的返回类型。无论如何,这方面有一个增强请求

然而,无论auto是否与嵌套函数一起使用,您都可以以类似的方式声明委托:

void main()
{
    auto bar = () { return "hello world"; };

    writeln(bar());
}

所以,基本功能仍然存在,即使您正在寻找的确切语法目前无法工作。

如果我理解正确的话,委托或函数关键字是不必要的吗? - Target-san
最好将 const bar = ... 这样的语句加入,这样它在 lvalues 方面更像一个真正的函数。 - BCS
@Target-san,通常只有在想要强制将 lambda 函数指定为其中一种类型时才使用 function 或 delegate 关键字,而且通常并不需要这样做。 - Jonathan M Davis
顺便提一下,如果你省略了关键字,它将始终是一个委托,所以强制只有一种方式。 - BCS
我不确定规范是否强制要求如果您没有将其标记为函数,则它始终是委托 - 理论上编译器应该能够为您找出来 - 但目前,从我所知道的情况来看,它总是生成一个委托。这可能会在某些时候发生变化。如果您没有指定它是委托还是函数指针,我认为依赖它是委托或函数指针不是一个好主意。然而,在大多数情况下,我认为这并不特别重要。如果您真的关心,您可以随时将其标记。 - Jonathan M Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接