slice! возвращает удаленный объект:
a = [ "a", "b", "c" ]
a.slice!(1) #=> "b"
a #=> ["a", "c"]
Как правило, в ruby мы предпочитаем не изменять исходный объект, если мы не ищем какой-то определенный прирост производительности ( очень очень редко, например, может быть, вы хотите уменьшить потребление памяти очень большого массива, прежде чем двигаться дальше.)
Это причина восклицательного символа (!
aka bang
), который обычно указывает на некоторые разрушительные поведение.
Пожалуйста, рассмотрите возможность использования версии без взрыва.
Array.new(6){ |i| i*i }
y = array1D.slice(2,2)
or
def some_method(input_array)
input_array.slice(2,2)
end
x = Array.new(6){ |i| i*i }
y = some_method(x)
Таким образом, ваш код становится более предсказуемым, поскольку вы не изменяете значение своих аргументов.