[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>

14 messages 2000/06/06

[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>

Hi,

12 messages 2000/06/07

[#3222] Ruby coding standard? — Robert Feldt <feldt@...>

16 messages 2000/06/09

[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>

> |I am new to Ruby and this brings up a question I have had

17 messages 2000/06/12
[#3281] Re: BUG or something? — Dave Thomas <Dave@...> 2000/06/12

Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>

> I want to contribute to the ruby project in my spare time.

15 messages 2000/06/12

[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>

I was looking at the Ruby editor/IDE for windows and was disappointed with

19 messages 2000/06/14

[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>

Hi All,

17 messages 2000/06/14

[#3415] Re: Waffling between Python and Ruby — Andrew Hunt <andy@...>

>Static typing..., hmm,...

11 messages 2000/06/14

[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>

32 messages 2000/06/16

[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>

Given that I cannot overload =, how should I go about ensuring a deep

20 messages 2000/06/19

[#3694] Why it's quiet — hal9000@...

We are all busy learning the new language

26 messages 2000/06/29
[#3703] Re: Why it's quiet — "NAKAMURA, Hiroshi" <nahi@...> 2000/06/30

Hi,

[#3705] Re: Why it's quiet — matz@... (Yukihiro Matsumoto) 2000/06/30

Hi,

[ruby-talk:03527] Re: Deep copy?

From: Dave Thomas <Dave@...>
Date: 2000-06-19 17:03:17 UTC
List: ruby-talk #3527
Conrad Schneiker <schneik@austin.ibm.com> writes:

> For the general education of other readers (e.g. myself), could someone
> please describe how deep copies are supported (in the sense of built-in
> features, if any) in other languages Python, Smalltalk, Eiffel, and
> Lisp/CLOS (or Scheme)?

The Smalltalk implementation is typical. We assume a protocol (in the
Smalltalk case it's simply support for the messages 'copy' and
'postCopy').


Objects are copied using

   fred  := bert copy.         # deep copy
   freda := betha shallowCopy.


'shallowCopy' is implemented in Object, and does the obvious stuff.


'copy' is also implemented in Object, but on its own it doesn't
work. Instead, every class that acts as a container has to add support 
for copying those contained objects. There are two ways of doing
this. The brute force way is to override the 'copy' method. Sometimes
this is required. However, the tidier way is to implement 'postCopy',
whose job is to copy just the contained objects. That's because the
default implementation of 'copy' is:

   copy
      ^self shallowCopy postCopy.

(so the 'shallowCopy' will copy the object itself, and the 'postCopy' then
handles the object specific stuff.) For example, postCopy for a bag in
Dolphin Smalltalk is implemented as

   postCopy
      super postCopy.
      original := contents.
      contents := original copyEmpty.
      original keysAndValuesDo: [:k :v | contents at: k put: v]




Regards


Dave



In This Thread