D有IIFE吗?

问题描述 投票:0回答:1

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

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

我尝试了很多JS语法。

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

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

d
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.