anyway - vars implement IFn, as far as I can see there's no real problem here, you can deref the var object and it just happens to also implement IFn
(control-return adds a new line without sending in slack, but sends immediately in gmail, clearly my brain is having trouble code switching here) On Thu, Jun 24, 2021 at 9:43 AM Justin Smith <noisesm...@gmail.com> wrote: > (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/CAGokn9L4MNe_A6qy3qkMTwzTmfYA%3DuYAzOpXR45j%3DKm_mBnwjA%40mail.gmail.com.