I guess extend-type does changes only to generated java class and the var
defrecordissue.arecord->ARecord
contains the 'old' version of ARecord constructor. Obviously it would be
weird for defprotocol to change the variable in another namespace.
Especially when you can extend a record from anywhere.
So If you want to create a record that implements your protocol via var
from record namespace, you should do some hackery to update that variable.
I've done a pull-request for you, but using direct constructor will be more
idiomatic
;
> ; this won't work unless you update manualy a variable ->ARecord in the
> namespace
> ;
> ;(defrecordissue.aprotocol/afn (defrecordissue.arecord/->ARecord))
> ;
> ; like
> (defmacro from-ns[nmsps & body]
> "launches body from namespace"
> `(binding
> [*ns* (find-ns ~nmsps)]
> (eval
> (quote (do ~@body)))))
> (from-ns 'defrecordissue.arecord
> (import '(defrecordissue.arecord.ARecord))
> (alter-var-root
> ('->ARecord (ns-publics 'defrecordissue.arecord))
> (fn[x] (fn[] (new ARecord)))))
> (println (defrecordissue.aprotocol/afn
> (defrecordissue.arecord/->ARecord)))
> ; 42
ndrw
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.