(sorry, hit reply too soon) On Thu, Jun 24, 2021 at 9:42 AM Justin Smith <noisesm...@gmail.com> wrote:
> > 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/CAGokn9JX7dZ81a5qkhhFt9HmJBNhZUZsB5UcQAye01NB0hAkaQ%40mail.gmail.com.