考慮下面的Ruby代碼:奇數紅寶石行爲
a = ["x"] * 3 # or a = Array.new(3, "x")
a[0].insert(0, "a")
a.each {|i| puts i}
我希望可以將輸出爲斧,X,X(上當然是新的生產線)。但是,在Ruby 1.9.1中,輸出是ax,ax,ax。這是怎麼回事?我已經將問題縮小到定義數組a
的方式。如果我明確寫出
a = ["x", "x", "x"]
然後代碼按預期工作,但是原始代碼中的任一版本都會給我這種意外的行爲。看起來,* /初始化器意味着副本實際上是對字符串「x」的同一副本的引用。但是,如果不是我寫的插入命令
a[0] = "a" + a[0]
然後我得到所需的輸出。這是一個錯誤,還是有一些我不瞭解的功能?
相關但不完全相同:http://stackoverflow.com/questions/9835030/changing-one-array-in-an-array-of-arrays-changes-them-all-why?lq=1 – 2012-07-17 22:54:55