Clojure doesn't give you direct access to the name of the function you're
defining. However, you could use a macro to get that. Here’s one way. This
macro binds the strange symbol %0 to the symbol naming the current function.
;; %0 is bound to the function's symbolic name within the function. Useful for
pre-conditions,
;; logging and error reporting.
(defmacro defn0 [fname & fdcls]
`(let [~'%0 (symbol (name (ns-name *ns*)) (name '~fname))]
(defn ~fname ~@fdcls)))
;; For example...
(defn0 my-func [x]
(println "calling" %0 x)
(+ x 3))
user=> (my-func 11)
calling user/my-func 11
14
The downside to using something like this is that other people might have a
harder time reading your code. I thought it was clever when I wrote it, but I
don't actually use it much.
> On Feb 14, 2015, at 11:11 AM, Cecil Westerhof <[email protected]> wrote:
>
> In Bash I use the following construct:
> printf "${FUNCNAME} needs an expression\n"
>
> In this way I do not have to change the print statement when the name of the
> function changes. Is something like this also possible in clojure?
--
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.