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 [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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/63bc7c93-ea90-4d9d-81f0-26899ea19250n%40googlegroups.com.