Sorry, it's clojure.repl/demunge so it depends on how you run your REPL and evaluate code -- in my case, clojure.repl symbols were all referred in. In your case, you'll need to require clojure.repl and refer it in:
(require '[clojure.repl :refer [demunge]) or make that part of your ns form as: (:require [clojure.repl :refer [demunge]]) -- Sean A Corfield -- (904) 302-SEAN An Architect's View -- https://corfield.org/ World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ "Perfection is the enemy of the good." -- Gustave Flaubert, French realist novelist (1821-1880) On Thu, Apr 29, 2021 at 10:27 PM damon kwok <qq563066...@gmail.com> wrote: > > Clojure 1.10.1 > (defn haha [] > (println (demunge (.getName (.getCallerClass > (java.lang.StackWalker/getInstance > java.lang.StackWalker$Option/RETAIN_CLASS_REFERENCE)))))) > Syntax error compiling at (REPL:1:23). > Unable to resolve symbol: demunge in this context > 在2021年4月30日星期五 UTC+8 上午4:35:45<Sean Corfield> 写道: > >> That's definitely nicer: >> >> dev=> (*defn* *add* [a b] >> >> #_=> (*println* (demunge (*.getName* (*.getCallerClass* ( >> *java.lang.StackWalker*/getInstance *java.lang.StackWalker$Option* >> /RETAIN_CLASS_REFERENCE))))) >> >> #_=> (*+* a b)) >> >> #'dev/add >> >> dev=> (add 1 2) >> >> dev/add >> >> 3 >> >> dev=> >> >> Thanks, Rémi! >> >> On Thu, Apr 29, 2021 at 12:08 PM Remi Forax <fo...@univ-mlv.fr> wrote: >> >>> >>> >>> ------------------------------ >>> >>> *De: *"Sean Corfield" <se...@corfield.org> >>> *À: *"clojure" <clo...@googlegroups.com> >>> *Envoyé: *Jeudi 29 Avril 2021 01:26:34 >>> *Objet: *Re: How get function name in body? >>> >>> Consider that: >>> >>> (defn add [a b] (+ a b)) >>> >>> is expanded to (something like): >>> >>> (def add (fn [a b] (+ a b))) >>> >>> So the actual code that runs is an anonymous function, which is bound to >>> the (global) var #'add -- the function itself has no name. >>> >>> dev=> (*macroexpand* '(*defn**add* [a b] (*+* a b))) >>> >>> (def add (clojure.core/fn ([a b] (+ a b)))) >>> >>> dev=> (*defn**add* [a b] (*+* a b)) >>> >>> #'dev/add >>> >>> dev=> add >>> >>> #object[dev$add 0x72f91c91 "dev$add@72f91c91"] >>> >>> So the value of add is an object, with type dev$add, a class that >>> implements a bunch of things including clojure.lang.IFn and >>> java.lang.Runnable and java.util.concurrent.Callable etc. >>> >>> The "name" of function is hard to get to, inside a function because of >>> that. >>> >>> One way to figure that out at runtime is to dig into the stack, which >>> you can get at by creating an exception and inspecting it: be aware that >>> this is an expensive operation! >>> >>> dev=> (*defn**add* [a b] >>> >>> #_=> (*let* [frame (*first* (*:trace* (*Throwable->map* (*ex-info**""* >>> {}))))] >>> >>> #_=> (*println* (demunge (*name* (*first* frame)))) >>> >>> #_=> (*+* a b))) >>> >>> #'dev/add >>> >>> dev=> (add 1 2) >>> >>> dev/add >>> >>> 3 >>> >>> dev=> >>> >>> demunge is what turns Clojure's generated classnames back into readable >>> source names. >>> >>> >>> Instead of using the stacktrace of java.lang.Throwable, you can use >>> StackWalker.getCallerClass() if you are using a jdk 9+ >>> >>> >>> The more important question is: why do you want the function's name >>> inside the body? >>> -- >>> Sean A Corfield -- (904) 302-SEAN >>> An Architect's View -- https://corfield.org/ >>> World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ >>> >>> "Perfection is the enemy of the good." >>> -- Gustave Flaubert, French realist novelist (1821-1880) >>> >>> >>> Rémi >>> >>> [1] >>> https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/StackWalker.html#getCallerClass() >>> >>> -- >>> 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. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/clojure/843762456.638578.1619723272421.JavaMail.zimbra%40u-pem.fr >>> <https://groups.google.com/d/msgid/clojure/843762456.638578.1619723272421.JavaMail.zimbra%40u-pem.fr?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> Sean A Corfield -- (904) 302-SEAN >> An Architect's View -- https://corfield.org/ >> World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ >> >> "Perfection is the enemy of the good." >> -- Gustave Flaubert, French realist novelist (1821-1880) >> > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/a3a4a5a8-18e8-4a07-b457-6ed58a75a800n%40googlegroups.com > <https://groups.google.com/d/msgid/clojure/a3a4a5a8-18e8-4a07-b457-6ed58a75a800n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CAD4thx_tnaZa5YTdojUojqEQ2ZH4_L478O9iN24MPwhxiMwVLg%40mail.gmail.com.