Suche…


Syntax

  • scope (exit) - Anweisungen werden unabhängig davon aufgerufen, wie der aktuelle Block beendet wurde
  • scope (success) - Anweisungen werden aufgerufen, wenn der aktuelle Block normal beendet wurde
  • scope (failure) - Anweisungen werden aufgerufen, wenn der aktuelle Block durch das Auslösen von Ausnahmen beendet wurde

Bemerkungen

Durch die Verwendung von Bereichswächtern wird Code viel sauberer, und die Ressourcenzuteilung kann nebeneinander angeordnet werden. Diese kleinen Helfer verbessern auch die Sicherheit, da sie sicherstellen, dass bestimmter Bereinigungscode immer aufgerufen wird, unabhängig davon, welche Pfade zur Laufzeit tatsächlich genommen werden.

Die D-Bereichsfunktion ersetzt effektiv das in C ++ verwendete RAII-Idiom, das häufig zu speziellen Bereichsschutzobjekten für spezielle Ressourcen führt.

Bereichsüberwachung wird in umgekehrter Reihenfolge aufgerufen, in der sie definiert sind.

Spielen Sie mit Scope Guards oder sehen Sie sich ein umfangreiches Tutorial an .

Platzieren Sie den Zuordnungs- und Bereinigungscode nebeneinander

Bereichsüberwachung erlaubt die Ausführung von Anweisungen unter bestimmten Bedingungen, wenn der aktuelle Block verlassen wird.

import core.stdc.stdlib;

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

Mehrere verschachtelte Bereiche

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>");
}

druckt

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow