D Language
Omfattningsvakter
Sök…
Syntax
- omfattning (exit) - uttalanden kallas oavsett hur det aktuella blocket lämnades ut
- omfattning (framgång) - uttalanden anropas när det aktuella blocket avslutades normalt
- omfattning (misslyckande) - uttalanden anropas när det aktuella blocket lämnades genom undantagskast
Anmärkningar
Genom att använda omfångsskydd gör koden mycket renare och gör det möjligt att placera resursallokering och rensa upp kod bredvid varandra. Dessa små hjälpare förbättrar också säkerheten eftersom de ser till att viss saneringskod alltid kallas oberoende av vilka vägar som faktiskt tas under körning.
Funktionen D scope ersätter effektivt RAII-formspråket som används i C ++ vilket ofta leder till speciella räckvakt föremål för specialresurser.
Omfattningsskydd kallas i omvänd ordning de definieras.
Lek med omfattningsvakter eller se en omfattande handledning .
Placera allokerings- och saneringskod bredvid varandra
Omfattningsvaktarna tillåter att exekvera uttalanden under vissa förhållanden om det aktuella blocket är kvar.
import core.stdc.stdlib;
void main() {
int* p = cast(int*)malloc(int.sizeof);
scope(exit) free(p);
}
Flera, kapslade områden
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>");
}
grafik
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow