I'm curious why you are saving hashmaps that have clojure code within it 
with the intention of evaluating this code as embedded in the hashmap? What 
is the use case? Are you trying to delay evaluation? Regardless, eval 
always incurs a cost and should generally be avoided if you can use 
"runtime" techniques instead. Is the embedded code trusted?

Best,
Brent

On Sunday, November 21, 2021 at 9:22:47 AM UTC-5 dieter.v...@gmail.com 
wrote:

> 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/ff296de8-ce0f-4798-a1cc-cd3e4b38c631n%40googlegroups.com.

Reply via email to