D有IIFE吗?

Does D have IIFE's?

JavaScript 有立即调用的函数表达式,它们看起来像这样: (函数(){})();

我想知道是否可以在 D 中实现类似的东西。 如果做不到这一点,一个额外的问题是:我可以在 Dlang 中实现 'Revealing Module' 设计模式,还是 JavaScript 独有?

我几乎尝试使用 JS 语法。

import std.stdio;
void main()
{
    (function(){
        return "hello";
    })();
}

我没有得到任何结果,但它似乎在我使用的在线代码操场上编译得很好。

是的,可以在 D 中做与 Javascript 中相同的事情,语法也非常相似 - 正如您在工作代码中看到的那样(就像我在评论中所说的那样,你看不到任何东西的原因仅仅是你的函数没有做任何事情!)

你也可以做揭示模块的事情,并且可以说 D 的标准库用它所谓的 "voldemort types" 来做到这一点 - 在返回到外部的函数内部声明的私有类型。但是完全像 Javascript 那样做是不必要的,因为 D 已经内置了模块,类,等等!

我在 D 中的几个地方使用了 IIFE 模式来允许语法只允许表达式的语句,例如在循环子句或 mixin 构造中。有时在初始化静态变量时也很有用。这是在单个作业中完成复杂工作的简单方法。

但是当涉及到细节隐藏时,由于 D 有模块并且它的模块有 private 成员,通常直接使用它更容易和更好。