Ich konnte nicht verstehen, warum in Ruby, Array#slice
und Array#slice!
verhalten sich anders als Array#sort
und Array#sort!
(in der Art, wie man die Ergebnisse auf einem neuen Array und die andere auf das aktuelle Objekt zurückgibt).Warum Array # Slice und Array # Slice! sich anders verhalten?
Mit sort
gibt die erste (ohne Knall) eine sortierte Kopie des aktuellen Arrays zurück, und sort!
sortiert das aktuelle Array.
slice
, gibt einen Array mit dem angegebenen Bereich, und slice!
löscht den spezifizierten Bereich von dem aktuellen Objekt.
Was ist der Grund dafür, dass sich Array#slice!
so verhält, anstatt das aktuelle Objekt zu einem Array mit dem angegebenen Bereich zu machen?
Beispiel:
a = [0,1,2,3,4,5,6,7,8,9]
b = a.slice(2,2)
puts "slice:"
puts " a = " + a.inspect
puts " b = " + b.inspect
b = a.slice!(2,2)
puts "slice!:"
puts " a = " + a.inspect
puts " b = " + b.inspect
Output:
slice:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [2, 3]
slice!:
a = [0, 1, 4, 5, 6, 7, 8, 9]
b = [2, 3]
Mit '!'auf einer Methode hat kein gesetztes Verhalten, es ist nur da, um anzuzeigen, dass die Methode in irgendeiner Weise die Eingabe verändert, während sie auch die exakt gleiche Ausgabe hat. Sie können es am Ende jeder von Ihnen geschriebenen Methode hinzufügen. – tpbowden