JavaScript具有立即调用的函数表达式,它们看起来像这样: (function(){})();
我想知道是否可以在D中实现类似的功能。 否则,一个额外的问题将是:我可以在Dlang中实现“显示模块”设计模式,还是这是JavaScript专有的?
我尝试使用很多JS语法。
import std.stdio;
void main()
{
(function(){
return "hello";
})();
}
我没有结果,但是在我使用的在线代码游乐场中,它似乎可以正常编译。
答案 0 :(得分:3)
是的,可以在D中执行与Javascript中相同的操作,并且语法也非常相似-正如您在工作代码中所看到的(就像我在评论中说的那样,为什么您不这样做?看到任何东西仅仅是因为您的函数没有执行任何操作!)
您也可以做显示模块的事情,可以说D的标准库使用所谓的“ voldemort类型”来做到这一点-voldemort类型-在函数内部声明的私有类型,该函数返回给外部。但是,由于D已内置模块,类等,因此完全不需要像Javascript那样做!
我在D的一些地方使用了IIFE模式,以允许语法仅允许表达式的语句,例如在循环子句或mixin
构造中。有时在初始化静态变量时也很有用。这是在单个任务中完成复杂工作的简便方法。
但是在细节隐藏方面,由于D有模块,而其模块具有private
个成员,因此使用它通常更容易,更好。