Est-ce que Clojure a un équivalent de construction try-with-resources de Java? Si ce n'est pas le cas, quelle est la manière normale de gérer ce langage dans le code de Clojure?Try-with-resources dans Clojure
L'idiome pré-Java-7 pour l'ouverture et la fermeture de ressources en toute sécurité est suffisamment détaillé pour qu'ils ajoutent un support pour les ressources d'essai au langage. Il me semble étrange que je ne trouve pas de macro pour ce cas d'utilisation dans la bibliothèque Clojure standard.
Un exemple pour un référentiel de projet basé sur Clojure, qui montre comment ce problème est traité dans la pratique, serait très utile.
OK, c'est logique. Je devrais encore ajouter un autre formulaire 'try' autour du' with-open' pour attraper les exceptions levées lors de l'ouverture ou de l'utilisation des ressources - mais je suppose que la manipulation de l'automation open/close séparément de la logique try/catch n'est pas une mauvaise chose. Je m'attendais juste à une équivalence 1: 1 avec la construction Java - mais il n'y a vraiment aucune raison que j'aurais dû m'y attendre. – DaoWen
vous pouvez avoir à la fois un '(catch Exception e ...)' et un '(finally (.close r))' dans un bloc '(try ...)' mais la macro 'with-resource' ne supporte pas Par défaut, vous devrez l'écrire vous-même. – erdos
@DaoWen Il s'agit d'une équivalence 1: 1. 'try (Foo x = bar()) {...}' ne gère aucune exception rencontrée lors de l'appel de 'bar()'. Comment pourrait-il? Il n'y a pas de 'x' valide pour appeler' .close() '. – amalloy