> Clojure vars under the IFn interface. In other words, you can only import Clojure functions, not Clojure values, through that API.
On Fri, Jun 18, 2021 at 12:29 PM ru <soro...@oogis.ru> wrote: > 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 > <https://groups.google.com/d/msgid/clojure/33e8dc71-7199-4f14-86d6-97b549b3b6e0n%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/CAGokn9J0jQddFa2KGtBZGhq7qHunz%3DD%2BA8Rf-rFZf%2BV%3DJj7rUQ%40mail.gmail.com.