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#))))) |