Ich weiß nicht, wie dieses Stück Python-Code in Clojureretrying etwas 3-mal vor Auslösen einer Ausnahme - in clojure
for i in range(3):
try:
......
except e:
if i == 2:
raise e
else:
continue
else:
break
ich implementieren fragen, warum etwas so einfach in Python so hart in Clojure ist. Ich denke, die Schwierigkeit liegt darin, dass Clojure eine funktionale Programmiersprache ist und daher für eine solche imperative Aufgabe nicht geeignet ist. Dies ist mein Versuch:
(first
(remove #(instance? Exception %)
(for [i (range 3)]
(try (......)
(catch Exception e
(if (== i 2)
(throw e)
e)))))))
Es ist sehr hässlich, und schlimmer noch, es nicht wie erwartet. Die for-Schleife wird tatsächlich vollständig und nicht träge ausgewertet (das habe ich festgestellt, als ich einen println hineingesteckt habe).
Wenn jemand eine bessere Idee hat, das zu implementieren, bitte erleuchte mich.
mögliche Duplikate von [Clojure: Wie wiederhole ich eine Ausnahme?] (Http: // stackoverflow.com/questions/1879885/clojure-how-to-wiederkehren-auf-Ausnahme) – amalloy