Thanks. This is nice. I'm thinking that the at:at: could be a nice addition to our Dictionary class. On Sun, May 28, 2017 at 4:24 PM, Stan Silver via Pharo-users < pharo-users@lists.pharo.org> wrote:
---------- Forwarded message ---------- From: Stan Silver <stanley.silver@yahoo.com> To: pharo-users@lists.pharo.org Cc: Bcc: Date: Sun, 28 May 2017 07:24:06 -0700 (PDT) Subject: Re: Dictionary whose values are dictionaries Stephane Ducasse-3 wrote
Hi
I'm looking for an implementation of dictionary whose value is also a dictionary.
Stef
1. These go only one level down, but I have defined these methods on class Dictionary.
at: firstKey at: secondKey ^ self at: firstKey at: secondKey ifAbsent: [ self errorKeyNotFound ]
at: firstKey at: secondKey ifAbsent: aZeroArgBlock | subDictionary | subDictionary := self at: firstKey ifAbsent: [ ^ aZeroArgBlock value ]. ^ subDictionary at: secondKey ifAbsent: [ aZeroArgBlock value ]
at: firstKey at: secondKey ifAbsentPut: aZeroArgBlock | subDictionary | subDictionary := self at: firstKey ifAbsentPut: [ Dictionary new ]. ^ subDictionary at: secondKey ifAbsentPut: [ aZeroArgBlock value ]
at: firstKey at: secondKey put: aValue | subDictionary | subDictionary := self at: firstKey ifAbsentPut: [ Dictionary new ]. ^ subDictionary at: secondKey put: aValue
2. I use this class for testing.
MockInstance>> doesNotUnderstand: aMessage " Getter: If the value is already there, it is either a branch or a leaf, so return it. Getter: If the value is missing, it is a branch, so add a new instance of self and return it. Setter: It is a leaf, so add the value.
| r | r := self new. r one two three: 3. r one two three
(The above should return 3) "
aMessage selector isUnary ifTrue: [ ^ self at: aMessage selector ifAbsentPut: [ self class new ] ]. aMessage selector isKeyword ifTrue: [ aMessage numArgs = 1 ifTrue: [ ^ self at: aMessage selector allButLast put: aMessage arguments first ] ]. ^ super doesNotUnderstand: aMessage
at: aSymbol ifAbsentPut: aValue ^ self values at: aSymbol ifAbsentPut: aValue
at: aSymbol put: aValue self values at: aSymbol put: aValue
values ^ values ifNil: [ values := Dictionary new ]
-- View this message in context: http://forum.world.st/ Dictionary-whose-values-are-dictionaries-tp4948453p4948484.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.