使用=
str = "cat in the hat"
str.object_id
#=> 70331872197480
def a(str)
str = "hat on the cat"
puts "in method str=#{str}, str.object_id=#{str.object_id}"
end
a(str)
in method str=hat on the cat, str.object_id=70331873031040
str
#=> "cat in the hat"
str.object_id
#=> 70331872197480
方法外部的str
和方法內部的str
的值是不同的對象。
使用String#replace
str = "cat in the hat"
str.object_id
#=> 70331872931060
def b(str)
str.replace("hat on the cat")
puts "in method str=#{str}, str.object_id=#{str.object_id}"
end
b(str)
in method str=hat on the cat, str.object_id=70331872931060
str
#=> "hat on the cat"
str.object_id
#=> 70331872931060
的str
的方法以外的值和str
方法內是相同的對象。
我同意@David @John如果你看看C源代碼(http://ruby-doc.org/core-1.9.3/String.html#method-i-replace),你會看到你的情況下的'a'不是重新初始化,把'replace'想象成改變這個變量。 –