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
成员,通常直接使用它更容易和更好。
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
成员,通常直接使用它更容易和更好。