multiple constructors?

A

aidy

Hi,

Is it possible to use multiple constructors in Ruby?

class SQLServerConnection

def initialize(server_name, db)

end

def initialize(server_name, db, user_name, password)

end
end

Thank You

Aidy
 
T

Todd Benson

Hi,

Is it possible to use multiple constructors in Ruby?

class SQLServerConnection

def initialize(server_name, db)

end

def initialize(server_name, db, user_name, password)

end
end

You can send your initialize an array or hash, or you can do

class C
def initialize( a, b, *c )
#verify and do stuff
end
end

hth,
Todd
 
R

Robert Dober

Hi,

Is it possible to use multiple constructors in Ruby?

class SQLServerConnection

def initialize(server_name, db)

end

def initialize(server_name, db, user_name, password)

end
end

Thank You

Aidy

First of all initialize is not a constructor but an initializer,
behind the scenes the following happenes

class Object
def self.new *args, &blk
o = allocate
o.send :initialize, *args, &blk # this because #initialize is
*always* private
o
end
end

As you can see #initialize is an instance method and #new is a
singleton (or class) method.

Secondly, and that holds for all methods, #initialize is only an
example, you cannot "overload" method definitions but simulate that
behavior, in your case I would do the following

class SQLServerConnection

private

def initialize *args
case args.size
when 2
init_name_db *args
when 4
init_user_pw *args
else
error
end
end

def init_name_db server_name, db
...
end

def init_user_pwd server_name, db, user, pwd
...
end
end

HTH
Robert
 
R

Rob Biedenharn

Hi,

Is it possible to use multiple constructors in Ruby?

class SQLServerConnection

def initialize(server_name, db)

end

def initialize(server_name, db, user_name, password)

end
end

Thank You

Aidy


No, but you can have optional parameters by giving a default value or
taking a hash.

def initialize(server_name, db, user_name=nil, password=nil)
if user_name && password
# connect with credentials
else
# connect anonymously
end
end

Called like: SQLServerConnection.new("myserver", "development",
'aidy', 'shh_secret')

-or-

def initialize(server_name, db, options={})
if options.has_key?:)user) && options.has_key?:)password)
# connect with credentials
else
# connect anonymously
end
end

and called like: SQLServerConnection.new("myserver",
"development", :user => 'aidy', :password => 'shh_secret')

-Rob

Rob Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 
S

Sebastian Hungerecker

aidy said:
Is it possible to use multiple constructors in Ruby?
No.


class SQLServerConnection
=A0 def initialize(server_name, db)

=A0 end
=A0 def initialize(server_name, db, user_name, password)

=A0 end
end

def initialize(server_name, db, user_name=3Dnil, password=3Dnil)

end


HTH,
Sebastian
=2D-=20
Jabber: (e-mail address removed)
ICQ: 205544826
 
P

Paul Stickney

I prefer to use different names for "different constructors".
Most of the time, I feel that overloading can complicate things,
more-so in a dynamic language.

Just make them class methods:

Foo.from_x()
Foo.with_size()

Etc, etc.


HTH,
Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,053
Latest member
BrodieSola

Latest Threads

Top