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.

Reply via email to