У меня есть массив, заполненный строками по умолчанию, и я пытаюсь заменить часть символов в строке по умолчанию в случайной позиции.Модификация элемента массива ведет себя неправильно
Если я что-то вроде этого, я буду иметь все элементы массива изменены:
arr = ["*"] * 10
arr[0][0..2] = "aaa"
arr
# => ["aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa"]
Но если я инициализировать массив по-другому, это работает:
(0..10).each.map {|i| arr[i] = "*"}
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
Некоторые больше, инициализировать и все элементы такие же:
str = "*"
(0..10).each.map {|i| arr[i] = str}
arr[0][0..2] = "aaa"
arr
# => ["aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa"]
Вместо этого я сделал это, чтобы инициализировать его уникальными элементами:
str = "*"
(0..10).each.map {|i| arr[i] = "#{str}" }
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
Что такое фон для такого поведения?
прав, потому что должен использоваться конструктор объекта 'Array # new', поскольку он может обрабатывать значения по умолчанию. [Прочитать документацию] (http://ruby-doc.org/core-2.2.0/Array.html) – Charles