SHOW:
|
|
- or go back to the newest paste.
| 1 | - | Hello, |
| 1 | + | ;Hello, |
| 2 | - | this little macro should act as try-catch clause. It takes an arbitrary number of args and executes them in a try-catch. If there are any bindings to something ex a filestream. It should be able to use it in the try clasue and then finally close it. |
| 2 | + | ;this little macro should act as try-catch clause. It takes an arbitrary number of args and executes them in ;a try-catch. If there are any bindings to something ex a filestream. It should be able to use it in the ;try clasue and then finally close it. |
| 3 | ||
| 4 | - | THE PROBLEM: (def v (safe (/ 10 2))) |
| 4 | + | ;THE PROBLEM: (def v (safe (/ 10 2))) |
| 5 | - | GIVES: CompilerException java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to |
| 5 | + | ;GIVES: CompilerException java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to |
| 6 | - | clojure.lang.IFn, compiling:(NO_SOURCE_PATH:1:8) , why?? |
| 6 | + | ;clojure.lang.IFn, compiling:(NO_SOURCE_PATH:1:8) , why?? |
| 7 | ||
| 8 | - | Sorry if my code might be horrible, im new to this. |
| 8 | + | ;Sorry if my code might be horrible, im new to this. |
| 9 | ||
| 10 | (defmacro safe [bindings & input] | |
| 11 | (let [ | |
| 12 | binds (if (> (count bindings) 0), bindings nil) | |
| 13 | args (if binds, input (cons bindings input)) | |
| 14 | ] | |
| 15 | (if binds | |
| 16 | `(let ~binds | |
| 17 | (try ~@args | |
| 18 | (catch Exception e# e#) | |
| 19 | (finally | |
| 20 | (. ~(binds 0) close)))) | |
| 21 | `(try ~@args | |
| 22 | (catch Exception e# e#))))) |