Поиск…


Синтаксис

  • scope (exit) - выписки вызываются независимо от того, как был выведен текущий блок
  • scope (success) - выписки вызываются, когда текущий блок обычно завершается
  • scope (failure) - выписки вызываются, когда текущий блок выходил из-за исключения

замечания

Использование защитных ограждений делает код намного чище и позволяет размещать ресурсы и очищать код рядом друг с другом. Эти маленькие помощники также улучшают безопасность, потому что они обеспечивают, чтобы определенный код очистки всегда назывался независимо от того, какие пути фактически выполняются во время выполнения.

Функция области D эффективно заменяет идиому RAII, используемую на C ++, что часто приводит к особым объектам защиты объектов для специальных ресурсов.

Охранные зоны вызываются в порядке, указанном в обратном порядке.

Играйте с защитой по охвату или смотрите обширный учебник .

Место размещения и код очистки рядом друг с другом

Защитные ограждения позволяют выполнять инструкции при определенных условиях, если текущий блок оставлен.

import core.stdc.stdlib;

void main() {
    int* p = cast(int*)malloc(int.sizeof);
    scope(exit) free(p);
}

Множественные, вложенные области

import std.stdio;

void main() {
    writeln("<html>");
    scope(exit) writeln("</html>");
    {
        writeln("\t<head>");
        scope(exit) writeln("\t</head>");
        "\t\t<title>%s</title>".writefln("Hello");
    } // the scope(exit) on the previous line is executed here

    writeln("\t<body>");
    scope(exit) writeln("\t</body>");

    writeln("\t\t<h1>Hello World!</h1>");
}

печать

<html>
    <head>
        <title>Hello</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow