Welche Alternativen zur automatischen Ressourcenverwaltung gibt es für Scala?
Ich habe gesehen, viele Beispiele von ARM (automatic resource management) auf der Website für Scala. Es scheint ein rite-of-passage zu schreiben, obwohl die meisten sehen ziemlich viel wie ein anderes. Ich hat sehen, ein ziemlich cooles Beispiel mit Fortsetzungen, obwohl.
Jedenfalls eine Menge code hat Mängel der einen oder anderen Art, so dass ich dachte, es wäre eine gute Idee zu haben, eine Referenz auf Stack Overflow, wo wir können abstimmen, bis die meisten richtigen und geeigneten Versionen.
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Daniel,
Ich habe gerade vor kurzem implementiert, die scala-arm-Bibliothek für die automatische Ressourcen-management. Die Dokumentation finden Sie hier: http://wiki.github.com/jsuereth/scala-arm/
Diese Bibliothek unterstützt drei Arten der Nutzung (derzeit):
1) Imperativ/for-Ausdruck:
2) der Monadischen Stil
3) Getrennte Fortsetzungen-Stil
Hier ist ein "echo", "tcp server":
Wird der code verwendet eine Ressourcen-Art-Merkmal, so ist es in der Lage, passen auf die meisten resource-Typen. Es hat einen fallback zu verwenden strukturelle Typisierung für Klassen mit entweder ein schließen oder die dispose-Methode. Lesen Sie bitte die Dokumentation und lassen Sie mich wissen, wenn Sie denken, der alle praktischen Funktionen hinzufügen.
InformationsquelleAutor der Antwort
Chris Hansen blog-Eintrag "ARM-Blöcke in Scala: Revisited" aus 3/26/09 Gespräche über Folie 21 von Martin Odersky ist FOSDEM-Präsentation. Das nächste block, ist gerade von Folie 21 (mit freundlicher Genehmigung):
--Zitat Ende--
Dann können wir rufen wie diese:
Welche Nachteile hat dieser Ansatz? Das Muster scheint zu Anschrift, 95% von denen die ich brauchen würde, die automatische Verwaltung der Ressourcen...
Edit: Hinzugefügt code-snippet
Edit2: die Erweiterung der design-Muster - inspiriert von der python
with
Anweisung und Adressierung:Managed
KlasseDies ist mit Scala 2.8.
InformationsquelleAutor der Antwort
Hier James Iry Lösung mit Fortsetzungen:
Hier sind die Lösungen mit und ohne Fortsetzungen zum Vergleich:
Und hier ist Tiark Rompf Vorschlag der Verbesserung:
InformationsquelleAutor der Antwort
Daniel, gut das du gefragt. Ich selbst bin fasziniert zu sehen, nachdem James Iry ' s code. Ich sehe eine allmähliche 4 Schritt der evolution zu tun ARM in Scala:
Was würde ich wirklich gerne sehen, ist eine Darstellung, die Beschreibung dieser. Es wird sehr lehrreich und sollten davon zu überzeugen, die begots, dass es eine Welt jenseits von Monaden 🙂
InformationsquelleAutor der Antwort
Licht ist-Gewicht (10 Zeilen code) ARM enthalten mit besser-Dateien. Siehe: https://github.com/pathikrit/better-files#lightweight-arm
Hier ist, wie es umgesetzt wird, wenn Sie nicht wollen, dass die ganze Bibliothek:
InformationsquelleAutor der Antwort
Wie über die Verwendung von Typ-Klassen
InformationsquelleAutor der Antwort
Andere alternative ist Abgehackt ist Faul TryClose Monade. Es ist ziemlich gut mit Datenbank-verbindungen:
Und mit streams:
Weitere Infos hier: https://github.com/choppythelumberjack/tryclose
InformationsquelleAutor der Antwort