Shalaka, This is a really interesting conversation :-) However, I'd insist that you ditch eval or any sort of complicated affair and adopt the metadata approach as I had suggested that day :-P
~BG On Fri, May 29, 2015 at 4:20 PM, Shalaka Patil <shal...@helpshift.com> wrote: > Hey, Thanks Herwig & Mohit. > > So, I have one more solution. > > Here is the original wait-until function- > > > (defn wait-until > ([pred] (wait/wait-until *driver* (fn [_] pred))) ([pred timeout] (wait > /wait-until *driver* (fn [_] pred) timeout)) ([pred timeout interval] ( > wait/wait-until *driver* (fn [_] pred) timeout interval)) ([driver pred > timeout interval] (wait/wait-until driver (fn [d] (pred d)) timeout > interval))) > > I have converted function to macro like - > > (defmacro with-wait-until-error-log > [pred & body] > `(try > ~@body > (catch Exception e# > (println "\nWait-until failed for: " ~pred "\n") > e#))) > > > (defmacro wait-until > [& args] > `(if (= (count '~args) 4) > (let [pred# (nth '~args 1)] > (with-wait-until-error-log > pred# > (wait/wait-until (eval (nth '~args 0)) > (fn [_#] (eval pred#)) > (nth '~args 2) > (nth '~args 3)))) > (let [pred# (first '~args)] > (with-wait-until-error-log > pred# > (wait/wait-until *driver* (fn [_#] (eval pred#)) > (nth '~args 1) > (nth '~args 2)))))) > > So, by this way I am not breaking input format or fn behaviour, but need > to use `eval`. So, is there any other way for doing same as eval? Or, is it > OK to use eval? > > > > On Friday, May 29, 2015 at 12:55:20 PM UTC+5:30, Mohit Thatte wrote: >> >> I see what you mean, this is nice >> >> On Thu, May 28, 2015 at 11:25 PM, Herwig Hochleitner <hhochl...@gmail.com >> > wrote: >> >>> 2015-05-28 19:42 GMT+02:00 Mohit Thatte <mohit....@gmail.com>: >>>> >>>> The interesting question here is what constitutes useful information! >>>> >>> >>> (let [pred #(exists? ".foo")] >>> (wait-until pred)) ;; <- the fact that it's called 'pred is not >>> interesting in most cases >>> >>> >>>> The trade-off is breaking an existing public API. >>>> >>> >>> How so? >>> >>> (defmacro op [msg args expr] >>> `(with-meta (fn ~args ~expr) {:msg ~msg :args '~args :expr '~expr})) >>> >>> (let [pred1 #(exists? ".foo") >>> pred2 (op "checks existance" [] (exists? ".foo"))] >>> ;; both these will work, the one with pred1 will give less useful >>> errors. the API of wait-until is unchanged >>> (wait-until pred1) >>> (wait-until pred2)) >>> >>> If Shalaka's primary goal is prettier errors in test failures, I'd >>>> settle for the fn body itself as the error message and that could be >>>> achieved without breaking the API. >>>> >>> >>> The op macro can include the code in its information. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@googlegroups.com >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> clojure+u...@googlegroups.com >>> 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 clojure+u...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> -Mohit Thatte >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > 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 clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Baishampayan Ghose b.ghose at gmail.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com 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 clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.