【问题标题】:D nested functions type inferenceD 嵌套函数类型推断
【发布时间】:2011-05-11 21:28:15
【问题描述】:

有谁知道 subj 是否会实现? 至少,为他们提供自动存储类? 谢谢!

【问题讨论】:

  • 请更具体。主题是什么意思?
  • 我的意思是说。 void foo() { auto bar() { return 3.14; }; } 不会编译,因为 bar 不能有自动存储类。我只是好奇是否计划至少进行这种增强。

标签: d type-inference nested-function


【解决方案1】:

自动功能一般都有各种问题,所以很可能是你做不到

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

    writeln(bar());
}

因为 auto 的错误而不是设计的错误。我不确定具体的计划是什么,但我认为您应该能够使用 auto 作为嵌套函数的返回类型。无论哪种情况,上面都有一个enhancement request

但是,无论 auto 是否适用于嵌套函数,您都可以以类似的方式声明委托:

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

    writeln(bar());
}

因此,基本功能仍然存在,即使您正在寻找的确切语法当前不起作用。

【讨论】:

  • 如果我理解正确,delegate 或 function 关键字不是必需的吗?
  • 拥有const bar = ... 可能会更好,这样它的行为更像是一个真正的函数 WRT 左值。
  • @Target-san 如果你想强制一个 lambda 函数是一个或另一个,你通常只使用 function 或 delegate 关键字,通常没有必要。
  • 顺便说一句,如果您省略关键字,它将始终成为委托,因此强制只是一种方式。
  • 如果您不将其标记为函数,我不确定规范是否强制它始终是委托 - 理论上编译器应该能够为您解决 - 但目前,它总是会根据我的判断生成一个委托。不过,这可能会在某个时候改变。如果您不指定它是委托还是函数指针,我认为将其作为一个委托或函数指针并不是一个好主意。不过,在大多数情况下,我认为这并不特别重要。如果你真的在乎,你可以随时标记它。
猜你喜欢
  • 2013-03-19
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多