Hi Christoph,
The two methods are different. #copyFrom: copies variables by index while #copySameFrom: copies variables by name. So, if you have an object named foo of class Foo with 2 instance variables a and b, and an object named bar of class Bar with 2 instance variables b and c, then foo copyFrom: bar will copy bar's b to foo's a, and bar's c to foo's b. #copySameFrom: will copy bar's b to foo's b and leave foo's a as is.
Levente
On Fri, 3 Jan 2020, Thiede, Christoph wrote:
Hi all,
I don't get the actual difference between #copyFrom: and #copySameFrom:.
The latter looks more "modern" to me, as it uses a primitive and has several implementors.
In my opinion, none of them actually matches its description ("Copy to myself all instance variables [named the same in | I have in common with] otherObject"). The following leaves o2 empty:
c1 := Object newUniqueClassInstVars: 'foo bar' classInstVars: ''. c2 := Object newUniqueClassInstVars: 'bar foo' classInstVars: ''. o1 := c1 new instVarNamed: #foo put: 6; instVarNamed: #bar put: 7. o2 := o1 as: c2. o2 instVarAt: 1 "nil".
o2 copySameFrom: o1. o2 instVarAt: 1 "nil".
Question: Could we deprecate #copySameFrom:, and in #copyFrom:, copy *all* matching instvars without respecting their order? Or did I miss any intended difference in behavior?
Best, Christoph