Was bedeutet scope
inBedeutung von "scope" in D (für einen Parameter)
void foo(scope void* p) { }
bedeuten?
(. Ich rede nicht über scope(exit)
oder scope int x = 5;
, sondern um scope
als innerhalb einer Parameterliste verwendet wird)
Was bedeutet scope
inBedeutung von "scope" in D (für einen Parameter)
void foo(scope void* p) { }
bedeuten?
(. Ich rede nicht über scope(exit)
oder scope int x = 5;
, sondern um scope
als innerhalb einer Parameterliste verwendet wird)
Es gibt 3 Verwendungen für scope
in D.
scope
Aussagen. Verwenden Sie dazu scope(success)
, scope(failure)
oder scope(exit)
. Die Anweisungen in dem folgenden Block werden ausgeführt, wenn der Gültigkeitsbereich der scope
-Anweisung beendet wird, wenn keine Ausnahme ausgelöst wird, wenn eine Ausnahme ausgelöst wird oder unabhängig davon, ob eine Ausnahme für Erfolg, Fehler oder Beendigung ausgelöst wird. Diese Verwendung von scope
bleibt in der Sprache.
scope
auf einer lokalen Variablen. Dies bringt die Variable auf den Stack - auch wenn es sich um eine Klasse handelt. Das Objekt wird zerstört, wenn es den Bereich verlässt. Diese Verwendung von scope
ist unsicher und wird schließlich aus der Sprache entfernt (obwohl std.typecons.scoped ersetzt es für diejenigen, die das Leben gefährlich leben wollen).
scope
auf einem Funktionsparameter (das ist der Anwendungsfall, nach dem Sie fragen). Wenn er auf einen Parameter platziert wird, der ein Delegat ist, bedeutet dies, dass Verweise auf diesen Parameter nicht maskiert werden können (d. H. Einer globalen Variablen zugewiesen werden können). Und wenn der Compiler dies auf Delegaten sieht, wird vermieden, eine Schließung zuzuweisen, wenn die Adresse einer lokalen Funktion genommen wird. Dies ist wichtig in opApply
Schleifen (reference post on newsgroup). Gegenwärtig hat scope
keinen Effekt auf andere Funktionsparameter als Delegaten und wird für alle anderen Typen ignoriert, obwohl es irgendwann in der Zukunft erweitert werden kann, um Typen wie Zeiger zu beeinflussen, um zu verhindern, dass sie der Funktion entkommen.
Wenn auf einem Funktionsparameter verwendet, die in
Schlüsselwort ist ein Alias für const scope
, die häufig, wie scope
auf Funktionsparameter versehentlich verwendet wird.
auf dem digitalen Mars Newsgroup-Suche, fand ich zwei halbbezogenen Beitrag über Umfang in diesem Zusammenhang: here und here.
Aus dem Lesen dieser beiden Post scheint Funktion Parameter Umfang nichts nützliches zu tun und es ist da für die Rückwärtskompatibilität. Es klingt sogar wie spätere Versionen, nachdem D2 dieses Qualifikationsmerkmal möglicherweise komplett entfernt hat.
Ich war auf der Suche nach # 3 ... das ist unglaublich! Ich habe mich immer gefragt, wie das geht, danke! :) – Mehrdad
@Lambert: Es scheint, das war nicht auf der D-Website dokumentiert, aber ich habe einen Bericht veröffentlicht, so wird dies wahrscheinlich bald in der Dokumentation hinzugefügt werden. –
@Andrej: Cool, danke! :) – Mehrdad