D Language
Scope Wachen
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>