--- Begin Message ---
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.
--- End Message ---