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