考虑下面的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