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

Reply via email to