Существует несколько способов отложить вычисления в Clojure
Наиболее очевидным является delay
:
(def x (delay (throw (ex-info "myException" {}))))
@x ;; exception is thrown
Вы также можете использовать лямбду, аналогично тому, что должно бытьсделано на других языках, или используйте лень.
Учитывая ваш пример кода в вопросе, похоже, что вы ищете что-то вроде этого:
(defn x [& args]
(throw (ex-info "myException" {:args args})))
(try
(x 1 2 3)
(catch Exception e
(println "Exception! data is " (ex-data e))))
Обратите внимание на использование ex-info
и ex-data
, который может быть полезен для передачи информации.