pretty cute Phil!

It does break for closures that use vars, like this:

(let [a inc] (def dinc (fn [x] (inc (a x)))))

Caused by: java.lang.IllegalArgumentException: No matching field
found: v for class clojure.lang.Compiler$VarExpr

so you probably want to test the return type from "(.init local)", and
invoke the proper method there.


On Feb 28, 4:03 pm, Phil Hagelberg <p...@hagelb.org> wrote:
> On Feb 25, 7:45 am, Jules <jules.gosn...@gmail.com> wrote:
>
> > I want to include functions in my metadata - e.g. I might want to
> > specify a version comparator function to allow tables to decide
> > whether a new version that they are presented with is actually more
> > recent than the one that they already hold. I might want to support
> > multiple primary or version keys by providing a pk-fn or version-fn
> > etc.
>
> > When I serialise the metadata from server to client, the client cannot
> > deserialise the metadata because the classes that were created
> > server-side to implement the functions are not present.
>
> We cooked up a simple library that allows for serializing functions at
> the Seattle Clojure group:
>
>  https://github.com/Seajure/serializable-fn
>
> It's able to serialize lexical scope along with the function, but
> there may be certain types of expressions that would cause trouble
> when they are closed over. It should be pretty easy to fix if you're
> interested in improving it a bit.
>
> This approach is a bit naive as it requires you to know in advance
> which functions you want to serialize and use the serializable fn
> macro, but depending on your needs it could get the job done. It has
> the advantage of being many many orders of magnitude simpler (20 LOC)
> than any other function serialization mechanism.
>
> -Phil

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