Multiple constructor in Ruby

Hello!

I have a question about the constructor in Ruby.

Here is an exemple class :

class Test
def initialize param
puts param
end
def initialize param1, param2
puts “#{param1} #{param2}”
end
end

If I call the second constructor, everything works fine, whereas I got
an ‘ArgumentError: wrong number of arguments (1 for 2)’ with the first.

So, has the second constructor overriden the first one? Does that mean
you have to implement ‘initialize’ only once in a class?

Thank you!

On 11/18/2010 9:41 AM, Arturo Bonechi wrote:

def initialize param1, param2
puts “#{param1} #{param2}”
end
end

If I call the second constructor, everything works fine, whereas I got
an ‘ArgumentError: wrong number of arguments (1 for 2)’ with the first.

So, has the second constructor overriden the first one? Does that mean
you have to implement ‘initialize’ only once in a class?

This is true for any method definition in Ruby, not just constructors.
There is no facility to select methods based on method signature, so
Ruby sees defining a method with the same name as an existing one as
replacing or overriding the original.

-Jeremy

On Thu, Nov 18, 2010 at 10:41 AM, Arturo Bonechi
[email protected]wrote:

def initialize param1, param2
Thank you!


Posted via http://www.ruby-forum.com/.

The answer to both of your questions is yes. Well, you can implement
it
twice, but, as in your code, the first one is irrelevant. Remember that
while defining a class, all you’re doing is executing code. Anyway,
things
like default values and the hash options idiom make method overloading
quite
unnecessary.

Ok, thanks to both of you for those quick replies!

That explains a lot of things and solves my problem.

Thank you again!