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 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.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to