(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.

Reply via email to