The Inbox: Collections-ct.860.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Collections-ct.860.mcz

commits-2
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.860.mcz

==================== Summary ====================

Name: Collections-ct.860
Author: ct
Time: 15 November 2019, 1:58:56.418005 pm
UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
Ancestors: Collections-pre.857

Add convenience constructor for Dictionary

Dictionary fromKeys: 'wasd' values: '8426'

=============== Diff against Collections-pre.857 ===============

Item was added:
+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+ | dictionary |
+ self assert: [keys size = values size].
+ dictionary := self new: keys size.
+ keys with: values do: [:key :value |
+ dictionary add: key -> value].
+ ^ dictionary!


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Jakob Reschke
Is there a strong indication to use add: anAssociation over at:put: here? The latter is more idiomatic and does not use the implementation detail that a dictionary is made up of associations. 


<[hidden email]> schrieb am Fr., 15. Nov. 2019, 13:59:
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.860.mcz

==================== Summary ====================

Name: Collections-ct.860
Author: ct
Time: 15 November 2019, 1:58:56.418005 pm
UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
Ancestors: Collections-pre.857

Add convenience constructor for Dictionary

Dictionary fromKeys: 'wasd' values: '8426'

=============== Diff against Collections-pre.857 ===============

Item was added:
+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+       | dictionary |
+       self assert: [keys size = values size].
+       dictionary := self new: keys size.
+       keys with: values do: [:key :value |
+               dictionary add: key -> value].
+       ^ dictionary!




Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Christoph Thiede

Thank you for the review! This was actually intended, or what would expect the following to do?


Dictionary fromKeys: 'wasda' values: '84265'


Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]>
Gesendet: Sonntag, 17. November 2019 17:24:25
An: [hidden email]
Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz
 
Is there a strong indication to use add: anAssociation over at:put: here? The latter is more idiomatic and does not use the implementation detail that a dictionary is made up of associations. 


<[hidden email]> schrieb am Fr., 15. Nov. 2019, 13:59:
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.860.mcz

==================== Summary ====================

Name: Collections-ct.860
Author: ct
Time: 15 November 2019, 1:58:56.418005 pm
UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
Ancestors: Collections-pre.857

Add convenience constructor for Dictionary

Dictionary fromKeys: 'wasd' values: '8426'

=============== Diff against Collections-pre.857 ===============

Item was added:
+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+       | dictionary |
+       self assert: [keys size = values size].
+       dictionary := self new: keys size.
+       keys with: values do: [:key :value |
+               dictionary add: key -> value].
+       ^ dictionary!




Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Nicolas Cellier
Hi Christoph,
I presume that Jakob is just suggesting using (at: key put: value) rather than (add: key -> value).

Le dim. 17 nov. 2019 à 17:36, Thiede, Christoph <[hidden email]> a écrit :

Thank you for the review! This was actually intended, or what would expect the following to do?


Dictionary fromKeys: 'wasda' values: '84265'


Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]>
Gesendet: Sonntag, 17. November 2019 17:24:25
An: [hidden email]
Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz
 
Is there a strong indication to use add: anAssociation over at:put: here? The latter is more idiomatic and does not use the implementation detail that a dictionary is made up of associations. 


<[hidden email]> schrieb am Fr., 15. Nov. 2019, 13:59:
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.860.mcz

==================== Summary ====================

Name: Collections-ct.860
Author: ct
Time: 15 November 2019, 1:58:56.418005 pm
UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
Ancestors: Collections-pre.857

Add convenience constructor for Dictionary

Dictionary fromKeys: 'wasd' values: '8426'

=============== Diff against Collections-pre.857 ===============

Item was added:
+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+       | dictionary |
+       self assert: [keys size = values size].
+       dictionary := self new: keys size.
+       keys with: values do: [:key :value |
+               dictionary add: key -> value].
+       ^ dictionary!





Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Christoph Thiede

Okay, I was thinking that #add: would raise an error if the key is already present. But it doesn't and replace the value.

(Which I find a bit confusing because if the key is already present, it deletes the old value silently.)

The only method that raises an error if a key is already present seems to be Dictionary>>#newFrom:.


Maybe this commit should be edited (diff-diff):

+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+       | dictionary |
+       self assert: [keys size = values size].
+       dictionary := self new: keys size.
+       keys with: values do: [:key :value |

- +               dictionary add: key -> value].

+ +               dictionary

+ +  at: key
+ +  ifPresent: [:existing | self error: ('Duplicate key "{1}"' format: {key})]
ifAbsentPut: value].

+       ^ dictionary!


Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
Gesendet: Sonntag, 17. November 2019 18:37:07
An: The general-purpose Squeak developers list
Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz
 
Hi Christoph,
I presume that Jakob is just suggesting using (at: key put: value) rather than (add: key -> value).

Le dim. 17 nov. 2019 à 17:36, Thiede, Christoph <[hidden email]> a écrit :

Thank you for the review! This was actually intended, or what would expect the following to do?


Dictionary fromKeys: 'wasda' values: '84265'


Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]>
Gesendet: Sonntag, 17. November 2019 17:24:25
An: [hidden email]
Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz
 
Is there a strong indication to use add: anAssociation over at:put: here? The latter is more idiomatic and does not use the implementation detail that a dictionary is made up of associations. 


<[hidden email]> schrieb am Fr., 15. Nov. 2019, 13:59:
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-ct.860.mcz

==================== Summary ====================

Name: Collections-ct.860
Author: ct
Time: 15 November 2019, 1:58:56.418005 pm
UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
Ancestors: Collections-pre.857

Add convenience constructor for Dictionary

Dictionary fromKeys: 'wasd' values: '8426'

=============== Diff against Collections-pre.857 ===============

Item was added:
+ ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
+ fromKeys: keys values: values
+
+       | dictionary |
+       self assert: [keys size = values size].
+       dictionary := self new: keys size.
+       keys with: values do: [:key :value |
+               dictionary add: key -> value].
+       ^ dictionary!





Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Levente Uzonyi
On Sun, 17 Nov 2019, Thiede, Christoph wrote:

>
> Okay, I was thinking that #add: would raise an error if the key is already present. But it doesn't and replace the value.

In my opionion, Dictionary >> #add: is a remnant of the old days when
bindings (class, global and pool) were always assotiations. It's goal was
to let multiple dictionaries share the same binding.
But, with the introduction of Binding & subclasses, this turned out to be
a harder problem, as their classes need to be changed accordingly. That's
something that isn't always done properly. E.g. if you have a Global in
Undeclared, and declare it as a class variable, the binding's class will
stay Global, however if you declare a class variable not in Undeclared,
its binding will be an Association. Also, from wherever that Global was
held a reference to, the reference is still there exposing the class
variable.

Using #add: in #fromKeys:values: causes problems with dictionaries having
their own #associationClass returning anything other than Association.

>
> (Which I find a bit confusing because if the key is already present, it deletes the old value silently.)
>
> The only method that raises an error if a key is already present seems to be Dictionary>>#newFrom:.
>
>
> Maybe this commit should be edited (diff-diff):
>
> + ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
> + fromKeys: keys values: values
> +
> +       | dictionary |
> +       self assert: [keys size = values size].
> +       dictionary := self new: keys size.
> +       keys with: values do: [:key :value |
>
> - +               dictionary add: key -> value].
>
> + +               dictionary
>
> + +  at: key
> + +  ifPresent: [:existing | self error: ('Duplicate key "{1}"' format: {key})]
> + +  ifAbsentPut: value].
You can't avoid the block around value, the argument of ifAbsentPut:. If
you did so, and value were a block, it would be evaluated, and the value
returned by that block would be stored in the dictionary instead of value
itself.


Levente

>
> +       ^ dictionary!
>
> _________________________________________________________________________________________________________________________________________________________________________________________________________________________________
> Von: Squeak-dev <[hidden email]> im Auftrag von Nicolas Cellier <[hidden email]>
> Gesendet: Sonntag, 17. November 2019 18:37:07
> An: The general-purpose Squeak developers list
> Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz  
> Hi Christoph,
> I presume that Jakob is just suggesting using (at: key put: value) rather than (add: key -> value).
>
> Le dim. 17 nov. 2019 à 17:36, Thiede, Christoph <[hidden email]> a écrit :
>
>       Thank you for the review! This was actually intended, or what would expect the following to do?
>
>
>       Dictionary fromKeys: 'wasda' values: '84265'
>
> _________________________________________________________________________________________________________________________________________________________________________________________________________________________________
> Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]>
> Gesendet: Sonntag, 17. November 2019 17:24:25
> An: [hidden email]
> Betreff: Re: [squeak-dev] The Inbox: Collections-ct.860.mcz  
> Is there a strong indication to use add: anAssociation over at:put: here? The latter is more idiomatic and does not use the implementation detail that a dictionary is made up of associations. 
>
>
> <[hidden email]> schrieb am Fr., 15. Nov. 2019, 13:59:
>       A new version of Collections was added to project The Inbox:
>       http://source.squeak.org/inbox/Collections-ct.860.mcz
>
>       ==================== Summary ====================
>
>       Name: Collections-ct.860
>       Author: ct
>       Time: 15 November 2019, 1:58:56.418005 pm
>       UUID: f6364e7f-08c8-694a-9060-21bc0a0c28d4
>       Ancestors: Collections-pre.857
>
>       Add convenience constructor for Dictionary
>
>       Dictionary fromKeys: 'wasd' values: '8426'
>
>       =============== Diff against Collections-pre.857 ===============
>
>       Item was added:
>       + ----- Method: Dictionary class>>fromKeys:values: (in category 'instance creation') -----
>       + fromKeys: keys values: values
>       +
>       +       | dictionary |
>       +       self assert: [keys size = values size].
>       +       dictionary := self new: keys size.
>       +       keys with: values do: [:key :value |
>       +               dictionary add: key -> value].
>       +       ^ dictionary!
>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Collections-ct.860.mcz

Christoph Thiede
See Collections-ct.921 :-)

Best,
Christoph



--
Sent from: http://forum.world.st/Squeak-Dev-f45488.html

Carpe Squeak!