Hi,

I read that there's no such thing as lisp-like multiple values return
in clojure. We can use vectors, and the destructuring feature helps
also.

However, for what I'm trying to do I need to emulate somehow the
following behavior:
- function returns a value which is a java instance (not possible to
change here, or at least not from what I see - it needs to be a java
instance)
- i need to be able to call some function which gets some values that
are not part of the java class

My first intuition was "extend the base class" (thinking as a Java
programmer). But this is not possible. Not with proxy (which does not
allow new fields) and not with reify (which does not extend classes).

So I'm thinking of using defrecords with protocols, where one slot
would be my java instance, and the rest would be my additional fields.
However I have a problem. Whenever my record value is used, I need to
use the java instance (sort of as a default field).

For example:

(defrecord myrecord [java-field myfield1 myfield2])

(def q (myrecord. java-intance "foo" "bar"))

And then evaluation of q should be equivalent of (:java-field q).
This is nonsense, I know but I need some way to get around this. Any
idea would be greatly appreciated.

(What I need is basically a workaround for the lisp-style multiple
values: in the default context, my value is evaluated to the java
instance, and with some special context I can get the values of other
fields as well.).

Thanks,
Razvan

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

Reply via email to