I am still not convinced.

> On 6 Mar 2019, at 19:24, Tim Mackinnon <tim@testit.works> wrote:
> 
> I still am tempted to make asDictionary work - because the the moment you get 
> a #key , DNU error - which is definitely not right.

The error might not be super clear, but it is not wrong, the elements of your 
collection do not respond to #key, a necessity to create a dictionary from a 
collection of associations/pairs.

Also, if you modify #asDictionary like that, then

  <some bag> as: #Dictionary 

will still fail.

This is all not so simple as it seems.

> So should Bag asDictionary give you a reasonable dictionary, or should it 
> throw a proper exception - something like:
> 
> DomainError signal: ‘#asDictionary not supported, use #valueAndCounts’
> 
> Is that better - or do we accept that it inherits it from Collection and so 
> can do something useful?
> 
> Tim
> 
>> On 6 Mar 2019, at 18:11, p...@highoctane.be wrote:
>> 
>> And when asking the object:
>> 
>> #(1 2 4 5 6 7 2 1 4 3) asBag  isDictionary
>> 
>> we get false. So, not, not a dictionary.
>> 
>> I still have been using #valuesAndCounts to get the dictionary out of a bag 
>> on several occasions.
>> 
>> And is useful indeed.
>> 
>> #(1 2 4 5 6 7 2 1 4 3) asBag occurrencesOf: 2
>> 
>> and 
>> 
>> #(1 2 4 5 6 7 2 1 4 3) asBag valuesAndCounts at: 2 
>> 
>> seem pretty much the same.
>> 
>> But in this age of streams/reactive streams and lazy evaluations, what do we 
>> have in Pharo on that front?
>> 
>> Phil
>> 
>> 
>> 
>> 
>> 
>> On Wed, Mar 6, 2019 at 4:49 PM Sven Van Caekenberghe <s...@stfx.eu> wrote:
>> I was just explaining how it is now, what I think the rationale is behind it.
>> 
>> I understand #asDictionary as working on a collection of pairs/associations 
>> (because it basically goes to #withAll:).
>> 
>> A bag is just a collection that is optimised for many duplicates, the fact 
>> that you have values and counts is more an implementation detail than an 
>> intrinsic property.
>> 
>> The conversion that you want, and that already exists in #valuesAndCounts is 
>> one interpretation of what a bag is, not the only one. A bag is foremost a 
>> collection of things.
>> 
>> I am not immediately convinced that #valuesAndCounts should be the default 
>> #asDictionary interpretation.
>> 
>> What about the inverse for example ?
>> 
>>   { #foo->2. #bar->3 } asDictionary asBag.
>> 
>> But this is certainly an interesting discussion.
>> 
>> > On 6 Mar 2019, at 16:23, Tim Mackinnon <tim@testit.works> wrote:
>> > 
>> > As Richard said - as a bag is relationship between keys and frequencies, I 
>> > would expect it to be able to convert to a dictionary.
>> > 
>> > It displays in an inspector just like a Dictionary - which is why I 
>> > figured I could convert to pass it back to the exercise that was written 
>> > with Dictionaries in mind.
>> > 
>> > <PastedGraphic-3.png>
>> > 
>> > 
>> > The code to fix it is quite simple, but on these kinds of things - I 
>> > thought it worth checking before submitting a PR.
>> > 
>> > Tim
>> > 
>> > 
>> >> On 6 Mar 2019, at 13:53, Sven Van Caekenberghe <s...@stfx.eu> wrote:
>> >> 
>> >> Why would that work ? What would you expect the output to be ?
>> >> 
>> >> Try:
>> >> 
>> >>  #(1 2 3) asDictionary 
>> >> 
>> >> it fails in exactly the same way. You need key/value pairs (Associations).
>> >> 
>> >> These do work
>> >> 
>> >>  Bag new add: #foo->100; asDictionary.
>> >> 
>> >>  Bag new addAll: 'ABABABAAAA'; valuesAndCounts.
>> >> 
>> >>> On 6 Mar 2019, at 14:25, Tim Mackinnon <tim@testit.works> wrote:
>> >>> 
>> >>> I was surprised to find that a Bag can’t convert to a dictionary - e.g.
>> >>> 
>> >>> Bag new 
>> >>>     addAll: 'aabbbbcddd’; 
>> >>>     asDictionary 
>> >>> 
>> >>> Gives an error - Dnu #key
>> >>> 
>> >>> 
>> >>> It looks to me like Bag is inheriting a bad version of #associationsDo:  
>> >>> and instead could simply forward it to #doWithOccurences: instead?
>> >>> 
>> >>> I know Bag is not used that much - but it comes up a lot in programming 
>> >>> exercises.
>> >>> 
>> >>> Tim
>> >> 
>> >> 
>> > 
>> 
>> 
>> 
> 


Reply via email to