Hi guys
I was looking at the Collection chapter and I stumbled upon newFrom:
and I wonder what is the real
difference between newFrom: and withAll:.
I have the impression that there is not much difference. There are
only 47 senders of newFrom: in the default Pharo image.
Dictionary class>>withAll: interprets its argument as a collection of
values,
whereas Dictionary class>>newFrom: expects a collection of associations.
I would really deprecate newFrom: in the future.
Stef
I can understand using anObject newFrom: anotherObject
newFrom: aSimilarObject
"Create an object that has similar contents to aSimilarObject. If
the classes have any instance variables with the same names, copy them
across. If this is bad for a class, override this method."
^ (self isVariable
ifTrue: [self basicNew: aSimilarObject basicSize]
ifFalse: [self basicNew]) copySameFrom: aSimilarObject
copySameFrom: otherObject
"Copy to myself all instance variables named the same in otherObject.
This ignores otherObject's control over its own inst vars."
| myInstVars otherInstVars |
myInstVars := self class allInstVarNames.
otherInstVars := otherObject class allInstVarNames.
myInstVars doWithIndex: [:each :index | | match |
(match := otherInstVars indexOf: each) > 0 ifTrue:
[self instVarAt: index put: (otherObject instVarAt: match)]].
1 to: (self basicSize min: otherObject basicSize) do: [:i |
self basicAt: i put: (otherObject basicAt: i)].
but I do not see the point to use this protocol over withAll: for
collection.
And in general I would prefer to call it cloneFrom:
Stef