I started learning Ruby a couple of months ago, I admit I really like the language. It has this ability to change any class methods and change how it works.
That ability is called Monkey Patch.
I am having this exercise about monkey patching from a site that I enrolled with. And the description is to modify the Array class and implement a new method called
my_rotate. The idea is, the Array class should have that new method and given a number as it’s method argument it should return a new array containing all the elements of the original array in a rotated order. If value is negative, it should rotate in the opposite direction.
names = ['jan', 'jamie', 'isabelle', 'dogie'] p names.my_rotate # ['jamie', 'isabelle', 'dogie', 'jan'] p names.my_rotate # ['isabelle', 'dogie', 'jan', 'jamie']
Here comes the take and drop methods to the rescue!
Looking into it’s documentation it says “Drops first n elements from array and returns the rest of the elements in an array.“
a = [1, 2, 3, 4, 5, 0] a.drop(3) # [4, 5, 0]
While take does the opposite
"Returns first n elements from the array. If a negative number is given, raises an Argument"
a = [1, 2, 3, 4, 5, 0] a.take(3) # [1, 2, 3]
class Array def my_rotate(num = 1) idx = num % length drop(idx) + take(idx) end end names = ['jan', 'jamie', 'isabelle', 'dogie'] p names.my_rotate # ['jamie', 'isabelle', 'dogie', 'jan'] p names.my_rotate(2) # ['isabelle', 'dogie', 'jan', 'jamie']