Hello,

It seems to be a design decision that 0-arity invoke of a composite data 
type gives an ArityException: the composite data type does not implement 
the IFn when no arguments are given.
Is there a certain design decision behind this behavior? (or a certain 
use-case)


repl> ;composite data type evaluates to itself
repl> {:a 1 :b (hash "word")} 
{:a 1 :b -304538205}
repl> '{:a 1 :b (hash "word")}
{:a 1 :b (hash "word")}
repl> (def mydata '{:a 1 :b (hash "word")})
repl> mydata
{:a 1 :b (hash "word")}
repl> ;composite data type implements IFn for its keys
repl> (mydata :b)
(hash "word")
repl> ; there is no '0-arity' implementation of IFn for composite data type
repl> ({})
... (ArityException)...
repl> (mydata)
... (ArityException)...
repl> ; instead i have to type eval
repl> ((eval mymap) :b)
 -304538205

I know its only 4 letters and a space extra, but software composition is 
supposed to avoid code duplication and perhaps the idea makes sense that 
invoking a map without arguments evaluates it... Hence the question about 
the choice made for the current behavior.

A possible small workaround  
(defrecord qid [qid]                                                
     clojure.lang.IFn                                                  
     (invoke [this] (eval qid))
But expect this to throw alot of bugs: this record is not the same simple 
map.
(issues with other protocols, reducers, transducers and much more I don't 
know of.)

I hope this is the right google group to ask this question.
kind regards,
Dieter

-- 
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/63bc7c93-ea90-4d9d-81f0-26899ea19250n%40googlegroups.com.

Reply via email to