Ich habe ein Array mit Standardzeichenfolgen gefüllt, und ich versuche, einen Teil der Zeichen in der Standardzeichenfolge an einer zufälligen Position zu ersetzen. Array-Element-Änderung verhält sich falsch
Wenn ich so etwas tun, werde ich alle Elemente im Array geändert:
arr = ["*"] * 10
arr[0][0..2] = "aaa"
arr
# => ["aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa", "aaa"]
Aber wenn ich ein Array in einer anderen Art und Weise zu initialisieren, es funktioniert:
(0..10).each.map {|i| arr[i] = "*"}
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
Some mehr initialisieren und alle Elemente gleich:
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"]
Stattdessen habe ich das es mit einzigartigen Elementen zu initialisieren:
str = "*"
(0..10).each.map {|i| arr[i] = "#{str}" }
arr[0][0..2] = "aaa"
arr
# => ["aaa", "*", "*", "*", "*", "*", "*", "*", "*", "*"]
Was ist der Hintergrund für ein solches Verhalten?
ist richtig, weil der eingebaute 'Array # neue' Objektkonstruktor verwendet werden sollte, da er Standardwerte verarbeiten kann. [Lesen Sie die Dokumentation] (http://ruby-doc.org/core-2.2.0/Array.html) – Charles