考虑以下 Ruby 代码:
a = ["x"] * 3 # or a = Array.new(3, "x")
a[0].insert(0, "a")
a.each {|i| puts i}
我希望输出是 ax, x, x (当然在新行上)。但是,在 Ruby 1.9.1 中,输出是 ax, ax, ax。这是怎么回事?我已将问题缩小到a
定义数组的方式。如果我明确写出
a = ["x", "x", "x"]
然后代码按预期工作,但是原始代码中的任何一个版本都给了我这种意想不到的行为。看来 */initializer 意味着副本实际上是对字符串“x”的同一副本的引用。但是,如果我写的不是插入命令
a[0] = "a" + a[0]
然后我得到所需的输出。这是一个错误,还是有一些我不理解的功能在起作用?