Today’s Ruby Tuesday continues with looking at the Array class type as a queue, and covers Array#drop.
While Ruby does not have a tail function on Array, you can emulate that functionality by calling Array#drop and passing a 1 as the argument to the method.
Array#drop takes a non-negative integer, “N”, as it’s argument and returns the an array of elements with the first N-elements removed.
[1, 2, 3, 4, 5].drop 1 # => [2, 3, 4, 5] [1, 2, 3, 4, 5].drop 3 # => [4, 5] [1, 2, 3, 4, 5].drop 0 # => [1, 2, 3, 4, 5] [1, 2, 3, 4, 5].drop -1 # ArgumentError: attempt to drop negative size # from (pry):9:in `drop'
If we call Array#drop on an empty array, we get back an empty array as well.
[].drop 1 # => []
And unlike other methods on Array, like Array#pop from last time, which mutate the underlying value (and don’t end with a !) we can see that calling Array#drop does not modify the original array object.
my_queue = [1, 2, 3, 4, 5] # => [1, 2, 3, 4, 5] my_queue.drop 1 # => [2, 3, 4, 5] my_queue # => [1, 2, 3, 4, 5]
Trying it out, we also see that there is not a destructive version of the drop method, as we get a NoMethodError when we try it.
my_queue.drop! 1 # NoMethodError: undefined method `drop!' for [1, 2, 3, 4, 5]:Array # from (pry):13:in `__pry__'
–Proctor