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
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
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
On Wed, Jul 23, 2008 at 12:09 PM, aidy <aidy.lewis@googlemail.com> wrote:
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
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
On Wed, Jul 23, 2008 at 7:09 PM, aidy <aidy.lewis@googlemail.com> wrote:
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
endThank You
Aidy
--
http://ruby-smalltalk.blogspot.com/
There's no one thing that's true. It's all true.
--
Ernest Hemingway
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
Rob@AgileConsultingLLC.com
On Jul 23, 2008, at 1:09 PM, aidy wrote:
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
endThank You
Aidy
aidy wrote:
Is it possible to use multiple constructors in Ruby?
No.
class SQLServerConnection
def initialize(server_name, db)end
def initialize(server_name, db, user_name, password)end
end
def initialize(server_name, db, user_name=nil, password=nil)
end
HTH,
Sebastian
--
Jabber: sepp2k@jabber.org
ICQ: 205544826
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