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.

Reply via email to