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 >> >> >> >> >> > >> >> >> >