RAII(C++)
Siehe aus Wikipedia. Der Destruktor wird durch Zerstören der automatischen Variablen aufgerufen, und die Ressource wird zu diesem Zeitpunkt geschlossen. Es wird davon ausgegangen, dass die close-API keine Ausnahme auslöst. Wie das Schutzmodul von Perl.
void functionA()
{
LogFile log("Output log of functionA");
log.write("fun Step succeeded");
// ...Verwenden Sie weiterhin log...
//Unabhängig davon, ob eine Ausnahme ausgelöst wird oder eine Funktion zurückgegeben wird, ist das Handle der Protokolldatei garantiert geschlossen.
}
Es gab es in der Vergangenheit nicht, aber es hat zugenommen.
with open("hello.txt") as f:
for line in f:
print line
Erhält einen Abschluss und weist Ressourcen vor und nach Ausführung der Funktion zu und zerstört sie.
open("foo.csv") {|file|
while l = file.gets
lines += 1
fields += l.split(',').size
end
}
Ich möchte c # mit sehen.
//Wenn Sie die Dispose-Methode implementieren, können Sie sie nach dem Beenden von verwenden
using (StreamWriter writer =
new StreamWriter("memo.txt", false, Encoding.UTF8))
{
writer.Write("Text");
}
scope(D-lang)
Die Funktion nach dem Gültigkeitsbereich wird beim Escape ausgewertet.
void abc()
{
Mutex m = new Mutex;
lock(m); //Mutex sperren
scope(exit) unlock(m); //Am Ende des Bereichs entsperren
foo(); //Mach die Verarbeitung
}
defer(go-lang)
Ähnlich wie Umfang
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close() // f.Schließen wird nach Abschluss ausgeführt
Es schließt diejenige, die AutoCloseable Interface implementiert. (Danke an tsuyoshi_cho)
public static void main(String[] args) {
try (AutoCloseable imp = new AutoCloseableImpl()) { // New!
System.out.println("hoge");
} catch(Exception e) {
System.out.println("catch:" + e);
} finally {
System.out.println("finally");
}
}
synchronized(Java) Sie können die Erfassung von Sperren für Objekte mit Syntax verwalten.
class MyObject {
int val;
MyObject(int val) {
this.val = val;
}
synchronized void setVal(int val) {
this.val = val;
}
synchronized int getVal() {
return val;
}
}
Vorerst werde ich es hinzufügen, wenn ich mich an etwas erinnere.
Recommended Posts