I have one function wait-until whose definition is like-
(defn wait-until
[pred]
(wait-until* pred))
where, pred is a function & wai-until* is some internal working.
Now, I want to modify it like-
(defn wait-until
[pred]
(try
(wait-until* pred)
(catch Exception e
(println "Exception happened for fn " pred))))
Now, for ex, input is (wait-until #(exists? ".foo")) and if wait-until*
throws exception
it will print something like- #<taxi$eval40409$fn__40410
clj_webdriver.taxi$eval40409$fn__40410@7b7b202f>(compiled name for that
anonymous function)
instead of that, I want actual function body which is #(exists? ".foo").
But, I didn't get way where I can get source of anonymous function.
Instead of that I found two ways for better user message:
1. Add meta to anonymous fn and print that meta in error message, so user
will get exact idea of where wait-until has failed.
(defn wait-until
[pred]
(try
(wait-until* pred)
(catch Exception e
(when (meta pred)
(println "Exception happened for fn with meta: " (meta pred))))))
and input will be like- (wait-until ^{:checks "existence of foo"} #(exists?
".foo"))
and if it throws exception,
output will be like- Exception happened for fn with meta: {:checks
"existence of foo"}
2. Pass pred fun in quoted form, so that wait-until fn can execute + get
its body as it is.
(defn wait-until
[pred]
(try
(wait-until* (exec pred))
(catch Exception e
(println "Exception happened for fn " pred))))
So, which way is better to go with. Or is there any other way to do?
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.