Zoeken…


Syntaxis

  • scope (exit) - instructies worden opgeroepen ongeacht hoe het huidige blok werd verlaten
  • scope (succes) - statements worden opgeroepen toen het huidige blok normaal werd verlaten
  • scope (mislukking) - statements worden opgeroepen wanneer het huidige blok werd verlaten door middel van exception-throwing

Opmerkingen

Door het gebruik van scoopbewakers wordt code veel schoner en kunt u brontoewijzing plaatsen en code naast elkaar opruimen. Deze kleine helpers verbeteren ook de veiligheid omdat ze ervoor zorgen dat bepaalde opschooncode altijd onafhankelijk van welke paden tijdens runtime wordt genomen wordt genoemd.

De D scope-functie vervangt effectief het RAII-idioom dat wordt gebruikt in C ++, wat vaak leidt tot speciale scope-bewakingsobjecten voor speciale bronnen.

Scope guards worden opgeroepen in de omgekeerde volgorde waarin ze zijn gedefinieerd.

Speel met scoopbeschermers of bekijk een uitgebreide tutorial .

Plaats toewijzing en opschoningscode naast elkaar

Scope-bewakers maken het mogelijk om onder bepaalde voorwaarden instructies uit te voeren als het huidige blok wordt verlaten.

import core.stdc.stdlib;

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

Meerdere, geneste bereiken

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

prints

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow