How about:

class A
  attr_reader :a
  attr_writer :a
  def initialize
    @a = [1, 2]
  end
end

anA = A.new
puts anA.a
anotherA = Marshal.load(Marshal.dump(anA))
puts anotherA.a
anA.a = [4,5]
puts "anA.a = #{anA.a}"
puts "anotherA.a = #{anotherA.a}"

Regards,
  JJ

--
Be Kind, Be Careful, Be Yourself
--
Solid, reliable software at reasonable prices
http://www.johnjohnsonsoftware.com


"Jim Freeze" <jim / freeze.org> wrote in message
news:Pine.BSF.4.32.0105171456230.70031-100000 / www.stelesys.com...
> On Fri, 18 May 2001, Dave Thomas wrote:
> > You could do something like:
> >
> >   class K
> >     attr_accessor :a
> >     def initialize
> >       @a = [1,2]
> >     end
> >
> >     def clone
> >       copy = super
> >       copy.a = a.clone
> >       copy
> >     end
> >   end
> >
> >   k1 = K.new
> >   k2 = k1.clone
> >
> >   k1.a[0] = 99
> >   k1.a       #=> [99, 2]
> >   k2.a       #=> [1, 2]
> >
>
> Thanks, that works well. But, what if a is private.
>
>   class K
>     def initialize
>       @a = [1,2]
>     end
>
>     def clone
>       copy = super
>       copy.a = @a.dup
>       copy
>     end
>   end
>
>   k1 = K.new
>   k2 = k1.clone   #=> NameError: undefined method `a=' for #<K:0x815c25c>
>
> Thanks
>
>
> =========================================================
> Jim Freeze
> jim / freeze.org
> ---------------------------------------------------------
> No comment at this time.
> http://www.freeze.org
> =========================================================
>
>