<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>Hi Levente,</p>
<p><br>
</p>
<p>I don't get that.</p>
<p><br>
</p>
<p>Did I interpret your explanation correctly?</p>
<p><br>
</p>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p></p>
<div>fooClass := Object newUniqueClassInstVars: 'a b' classInstVars: ''.</div>
<div>barClass := Object newUniqueClassInstVars: 'b c' classInstVars: ''.</div>
<div>foo := fooClass new.</div>
<div>bar := barClass new</div>
<div><span style="white-space:pre"></span>instVarNamed: #b put: 2;</div>
<div><span style="white-space:pre"></span>instVarNamed: #c put: 3;</div>
<div><span style="white-space:pre"></span>yourself.</div>
<div>foo copyFrom: bar.</div>
<div>foo instVarNamed: #b "expected: 2, actual: nil"</div>
<p></p>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p><br>
</p>
<p>Otherwise, if I put #b as the first instvar in both classes, #copyFrom: and #copySameFrom: won't differ again ...</p>
<p><br>
</p>
<p>Best,</p>
<p>Christoph</p>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Levente Uzonyi <leves@caesar.elte.hu><br>
<b>Gesendet:</b> Freitag, 3. Januar 2020 19:05 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] Object >> #copyFrom: vs Object >> #copySameFrom:</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">Hi Christoph,<br>
<br>
The two methods are different. #copyFrom: copies variables by index while<br>
#copySameFrom: copies variables by name.<br>
So, if you have an object named foo of class Foo with 2 instance variables<br>
a and b, and an object named bar of class Bar with 2 instance variables b<br>
and c, then foo copyFrom: bar will copy bar's b to foo's a, and bar's c to<br>
foo's b. #copySameFrom: will copy bar's b to foo's b and leave foo's a as<br>
is.<br>
<br>
Levente<br>
<br>
<br>
On Fri, 3 Jan 2020, Thiede, Christoph wrote:<br>
<br>
> <br>
> Hi all,<br>
> <br>
> <br>
> I don't get the actual difference between #copyFrom: and #copySameFrom:.<br>
> <br>
> <br>
> The latter looks more "modern" to me, as it uses a primitive and has several implementors.<br>
> <br>
> 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:<br>
> <br>
> <br>
> c1 := Object newUniqueClassInstVars: 'foo bar' classInstVars: ''.<br>
> c2 := Object newUniqueClassInstVars: 'bar foo' classInstVars: ''.<br>
> o1 := c1 new<br>
> instVarNamed: #foo put: 6;<br>
> instVarNamed: #bar put: 7.<br>
> o2 := o1 as: c2.<br>
> o2 instVarAt: 1 "nil".<br>
> <br>
> o2 copySameFrom: o1.<br>
> o2 instVarAt: 1 "nil".<br>
> <br>
> <br>
> 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?<br>
> <br>
> Best,<br>
> Christoph<br>
> <br>
> <br>
></div>
</span></font></div>
</div>
</div>
</body>
</html>