D有IIFE吗?

时间:2019-10-16 21:02:07

标签: d

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

我想知道是否可以在D中实现类似的功能。 否则,一个额外的问题将是:我可以在Dlang中实现“显示模块”设计模式,还是这是JavaScript专有的?

我尝试使用很多JS语法。

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

我没有结果,但是在我使用的在线代码游乐场中,它似乎可以正常编译。

1 个答案:

答案 0 :(得分:3)

是的,可以在D中执行与Javascript中相同的操作,并且语法也非常相似-正如您在工作代码中所看到的(就像我在评论中说的那样,为什么您不这样做?看到任何东西仅仅是因为您的函数没有执行任何操作!)

您也可以做显示模块的事情,可以说D的标准库使用所谓的“ voldemort类型”来做到这一点-voldemort类型-在函数内部声明的私有类型,该函数返回给外部。但是,由于D已内置模块,类等,因此完全不需要像Javascript那样做!

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

但是在细节隐藏方面,由于D有模块,而其模块具有private个成员,因此使用它通常更容易,更好。