[squeak-dev] Object >> #copyFrom: vs Object >> #copySameFrom:

Levente Uzonyi leves at caesar.elte.hu
Fri Jan 3 18:05:44 UTC 2020


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
> 
> 
>


More information about the Squeak-dev mailing list