У D есть IIFE? - PullRequest
       30

У D есть IIFE?

1 голос
/ 17 октября 2019

JavaScript немедленно вызвал выражения функций, они выглядят так: (function () {}) ();

Мне было интересно, можно ли достичь чего-то подобного в D. В противном случае, бонусный вопрос будетбыть: Могу ли я достичь шаблона проектирования «Модуль раскрытия» в Dlang, или это эксклюзив для JavaScript?

Я пытался использовать в значительной степени синтаксис JS.

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

Я не получил результата, но, похоже, он прекрасно компилировался на игровой площадке онлайн-кода, которую я использовал.

1 Ответ

3 голосов
/ 17 октября 2019

Да, в D можно делать те же вещи, что и в Javascript, и синтаксисы тоже очень похожи - как вы можете видеть из своего рабочего кода (как я сказал в комментарии, причина, по которой вы этого не делаете)увидеть что-нибудь просто означает, что ваша функция ничего не делала!)

Вы также можете сделать модуль раскрытия модуля, и, возможно, стандартная библиотека D делает это с помощью того, что она называет «типами волдеморта» - закрытый тип, объявленный внутрифункция, которая возвращается наружу. Но делать это точно так же, как в Javascript, не нужно, поскольку D имеет встроенные модули, классы и т. Д.!

Я использовал шаблон IIFE в D в нескольких местах, чтобы разрешить операторы, где грамматика допускает только выражение, напримерв предложении цикла или конструкции mixin. Также полезно при инициализации статических переменных иногда. Это простой способ выполнить сложную работу в одном назначении.

Но когда дело доходит до сокрытия деталей, так как D имеет модули, а его модули имеют private членов, обычно проще и приятнее просто использоватьэто.

...