Ruby for Rails book question

The book says that it is possible to define a method twice and the last
definition over-rides
previous definitions.

But it does not explain why we might need to do this. Any ideas on
scenario where this might be
helpful? TIA.

Bala P. wrote:

The book says that it is possible to define a method twice and the last definition over-rides
previous definitions.

But it does not explain why we might need to do this. Any ideas on scenario where this might be
helpful? TIA.

Loads of occasions. I’ve just used it to give a method to a parent STI
class, which is therefore the default method for all children. However,
one of the child classes redefines that method because it needs to
behave in a different way just for that child class. Once you get used
to it, it’s tremendously powerful.

HTH
CT

I understand about the inheritance. Here is the section that is
confusing:

Redefining methods
Nothing stops you from defining a method twice, or overriding it:
class C
def m
puts “First definition of method m”
end
def m
puts “Second definition of method m”
end
end
What happens when we call m on an instance of C? Let?s find out:
C.new.m
The printed result is Second definition of method m. The second
definition has
prevailed: We see the output from that definition, not from the first.
When you
override a method, the new version takes precedence.

Is there any real-life scenario for its use?

Do you mean you would open the class and define the same method with
custom implementation? That
is not the same as defining within the same class. If you could modify
that class, why not just
delete the old method implementation? It’s not being used so we keep the
junk code around?

You wouldn’t literally define a method twice in a row like that… but
there are scenarios – other than inheritance – where you might
redefine a method.

Like, say you’re using a plugin such as LoginEngine. Maybe the
controller methods provided don’t do quite what you want. You can
define your own UserController which has the same methods as
LoginEngine’s UserController. You’re not subclassing, and you’re not
replacing the whole UserController class – just the methods with the
same names will be overwritten.

Make sense?