Thank you, Gary, for the comprehensive answer. I have a control over Clojure side, so I decide to add special functions to get values of needed vars. Thanks to all for the help.
Best regards, Ru пятница, 18 июня 2021 г. в 20:23:31 UTC+3, gary.ve...@gmail.com: > The official Clojure API for Java is defined here > <https://clojure.github.io/clojure/javadoc/clojure/java/api/Clojure.html> and > only supports importing Clojure vars under the IFn interface. In other > words, you can only import Clojure functions, not Clojure values, through > that API. What you are trying to do is not supported. > > That does not mean it's impossible. If you control the Clojure side, the > easiest approach is to just make a function and call that through the > official API. If for some reason that's not an option, you can try > gen-class <https://clojuredocs.org/clojure.core/gen-class>, which may be > faster. > > If you can't change the Clojure side, you'll have to use undocumented > APIs. The Clojure.var > <https://github.com/clojure/clojure/blob/master/src/jvm/clojure/java/api/Clojure.java#L82> > call > will return a Var > <https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java> > (cast > to the IFn > <https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java> > > interface), which has a deref() > <https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java#L199> > > method that should get you the underlying value. This is undocumented so it > may break and all that, but it really looks like all you need to do is cast > that IFn back to a Var (or an IDeref > <https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IDeref.java>, > > as Chris suggested). > > Overall, I'd strongly recommend going through the documented API and just > add a no-arg function. > > On Fri, 18 Jun 2021 at 12:53, ru <sor...@oogis.ru> wrote: > >> Dear Clojure users and team! >> Citation 1 from Clojure documentation: >> >> "Calling Clojure From Java.. >> IFn plus = Clojure.var("clojure.core", "+"); >> plus.invoke(1, 2);.." >> >> With functions all well but with def.. >> >> Citation 2: >> >> "(def *symbol* *doc-string*? *init*?) >> >> Creates and interns or locates a global var >> <https://clojure.org/reference/vars> with the name of *symbol* and a >> namespace of the value of the current namespace (*ns*). " >> >> I can not figure out how to get the value of the symbol, created with def >> construct in Clojure and, for example, print it with System.out.println in >> Java. >> >> I tried everything, nothing works! :( >> >> Any help would be greatly appreciated. >> >> Sincerely, >> >> Ru >> >> >> >> >> >> -- >> 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/fcbd3883-705a-4180-9b99-7ccad64a09afn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/clojure/fcbd3883-705a-4180-9b99-7ccad64a09afn%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/33e8dc71-7199-4f14-86d6-97b549b3b6e0n%40googlegroups.com.