Yeah, that's what I thought. I guess I'm using it in a way that's not 
standard practice. Luckily it's not a bottleneck in my case.

Has there been discussion about a "shortable" version of s/keys which just 
checks for key existence and doesn't recursively validate the corresponding 
values?

I suppose if performance were an issue assuming the same requirements, I'm 
guessing some minimal work key-checking algorithm exists that I could 
write. For now, clojure.spec is convenient.

On Wednesday, September 13, 2017 at 4:55:44 PM UTC-4, Alex Miller wrote:
>
> Seems pretty slow to dispatch on a linear series of spec validations, but 
> I don't see any reason it wouldn't work.
>
> On Wednesday, September 13, 2017 at 3:47:40 PM UTC-5, Brent Millare wrote:
>>
>> The example for multi-spec provided in the spec guide assumes a key that 
>> denotes a "type". (This key is used as the dispatch fn). In my situation, 
>> I'm assuming I don't have control over what maps are generated. In other 
>> words, I explicitly do not want to have to encode types into the input map. 
>> Instead, I want to rely on the "shape" (key set), since that is the most 
>> flexible. While I could create a dispatch function that analyzes the input 
>> and produces a "type", that offers no advantages over what I presented 
>> earlier. Adding more cases is not extensible since it requires redefining 
>> the dispatch fn. In other words, I'd be just copying pasting my presented 
>> function as the dispatch fn.
>>
>> Alex, did I address your point? Is the approach you are suggesting 
>> different?
>>
>> Alternatively, my previous example might have been misleading since I 
>> used keys to represent useful work. Perhaps it would have been better 
>> written as:
>>
>> (fn [m]
>>   (condp clojure.spec.alpha/valid? m
>>       ::foo-map-spec ... do foo stuff ...
>>       ::bar-map-spec ... do bar stuff ...))
>>
>> On Wednesday, September 13, 2017 at 3:46:43 PM UTC-4, Alex Miller wrote:
>>
>>> You might want to look at s/multi-spec which lets you create a variable 
>>> open spec based on a multimethod, which would in this case be based on key 
>>> availability.
>>>
>>>
>>> On Wednesday, September 13, 2017 at 11:54:31 AM UTC-5, Brent Millare 
>>> wrote:
>>>>
>>>> I have several maps with different combinations of keys for each map. I 
>>>> want to process each map but do different work depending on the set of 
>>>> keys 
>>>> available, basically dispatch on key availability. I thought clojure.spec 
>>>> might be a good fit for doing the classification step. So for each key, I 
>>>> could define a spec. Next, I would use clojure.spec.alpha/keys to define a 
>>>> spec for each set of keys I'd like to match. Finally, I would dispatch 
>>>> like 
>>>> so:
>>>>
>>>> (fn [m]
>>>>   (condp clojure.spec.alpha/valid? m
>>>>       ::foo-map-spec :do-foo-stuff
>>>>       ::bar-map-spec :do-bar-stuff))
>>>>
>>>> Does this seem reasonable?
>>>>
>>>> The advantage in my mind is its thorough, explicit, and easy to read. 
>>>> Possible downsides is performance if it mattered.
>>>>
>>>> What are the advantages/disadvantages to this approach compared to 
>>>> other methods?
>>>>
>>>

-- 
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/d/optout.

Reply via email to