A couple days ago during a code review one of my coworkers noticed that we
super method with no parameters and still had parenthesis. They
wanted to remove it; however, it turns out in Ruby that
super does some extra
magic that you need to be careful about.
To begin we need to talk about class inheritance; a concept most if not all object oriented based languages use. Let’s look at some Ruby code and explore this concept.
Sprocket class re-defines the
initialize method, you can use
super to call the parent class method. With Ruby; however, super acts a
little different than other method calls. When you use a “naked” call to
super like in the code example above on line 14, it gets passed all of the
parameters that the child method receives.
For this reason, if you want to override the default functionality you have to
super() so Ruby knows not to pass all of the parameters down to the
parent class method. This doesn’t happen to often, but when it does it can
catch you by surprise.
Another thing I discovered when playing around with
super for this post is you
shouldn’t name a method this:
It turns out
super not bound to an object tries to call a higher inherited
method. However; if you use
self.super or try sending it with
it will call the method defined as
super. I would highly recommend naming a
method super, but, it does look like it won’t mess up how it works if you take