对象消失了?

对象消失了?

定义了两个对象,将第二个对象赋值给第一个对象后,第一个对象会消失吗?
以下是php?name=%B2%E2%CA%D4" onclick="tagshow(event)" class="t_tag">测试代码:
class Song
  def initialize(name,artist,duration)
   @name = name
   @artist = artist
   @duration = duration
  end
  def to_s
   "Song: #@name --#@artist (#@duration)"
  end
  attr_accessor :name, :artist, :duration
end
song = Song.new("My way","BeiJing",180)
song1 = Song.new("I ok.","That is right.",280)
puts song.to_s
song = song1
puts song.to_s
song1.name = "I ok too."
puts song.to_s
结果,song.to_s显示结果是Song: I ok too. --That is right. (280)
我的问题是song和song1内容这时完全是一样的,为什么这样呢?原来song的对象消失了吗?
不是的..

不能这么写.

错在这里..

song = song1

这个的意思是song1的Object_id赋给song

Object_id我的理解是一个内存地址的指针.

应该用克隆才可以.
sonng = song.colon

嗯,现在知道原因了,song和song1都是对象的一个引用,所以,song = song1实际上是让song指向song1的对象,所以才会出现这种情况。
但是我的问题是采用song = song1后,song原来指向的对象去哪了?是自动消失了吗?
如果仅仅是为了将song1的对象值赋给song的对象,可以采用song = song1.dup来操作,就不会出现上面的问题了。
对karon_flame回复中提到的colon方法,没找到相关的定义。
sorry colon貌似是java的..
或许是吧
我有点忘记了...

不好意思
karon_flame你的意思我大概是清楚的,大家思路也是相同的,我现在是有些不太明白,Ruby中的对象是不是会随时消失?如果采用song = song1的写法,那song原来所指的对象去哪了?
新手也冒个泡
1、前面提到的colon应该是指的clone方法
2、Ruby中的对象在没有被使用时,是会自动回收的
是啊,看不懂了。希望高折来指点一二

[ 本帖最后由 sevk 于 2009-1-3 13:40 编辑 ]
song原来所指的对象还在内存里啊,直到被garbage collection回收。