Not sure what is wrong. strange error

My class declation is like this

class TorontoTraderLoader
INDEX_SYMBOL=2
STOCK_SYMBOL=1
@backTestDb=[‘backtestBackTest’, ‘user’,‘pass’]

def initialize(backTesting)
	@exchanges=@industries=@sectors=@stocksymbols=''
	@dbcon=DbAccess.new(@backTestDb)
	loadLookup
end
def initialize()
@exchanges=@industries=@sectors=@stocksymbols=''

	loaddbConn
	loadLookup
end


I get the following error and it is so odd
irb(main):001:0> require ‘TorontoTraderLoader’
=> true
irb(main):002:0> a=TorontoTraderLoader.new(‘ww’)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):2:in `initialize’
from (irb):2

It does not make any sense. i have a overloaded constructor. i am not
sure why it does not call teh overloaded constructor

Hello !

end
sure why it does not call teh overloaded constructor
There is no such thing as overloading in Ruby. Your second definition
is cancelling the first one. Try to run this with ruby -w, and you’ll
get a warning…

Ruby is not C++ :wink: !

Vince

On Sat, 16 Sep 2006, Junkone wrote:

  loadLookup

=> true
irb(main):002:0> a=TorontoTraderLoader.new(‘ww’)
ArgumentError: wrong number of arguments (1 for 0)
from (irb):2:in `initialize’
from (irb):2

It does not make any sense. i have a overloaded constructor. i am not

No, you redefined it. No overloading in Ruby (because “Duck Typing”)

sure why it does not call teh overloaded constructor

Maybe

def initialize(backTesting = nil)
@exchanges=@industries=@sectors=@stocksymbols=’’
if backTesting.nil?
@dbcon=DbAccess.new(@backTestDb)
else
loaddbConn
end
loadLookup
end

is more the kind of think you want, but in the first method you
don’t seem to use the param backTesting anyway.

    Hugh

On Sat, 16 Sep 2006, Vincent F. wrote:

It does not make any sense. i have a overloaded constructor. i am not
sure why it does not call teh overloaded constructor

There is no such thing as overloading in Ruby. Your second definition
is cancelling the first one. Try to run this with ruby -w, and you’ll
get a warning…

Ruby is not C++ :wink: !

Vince

It’s too bad Ruby does not allow overloaded methods. It makes more
sense,
IMHO, in this case to have two constructors, each of which perform two
different ‘functions’, rather than having if/else/case statements inside
the constructor with default arguments.

Nate

hi, see the other posts about overloading, but i’ll try to help with
your case

On 9/15/06, Junkone [email protected] wrote:

            loadLookup
    end
    def initialize()
    @exchanges=@industries=@sectors=@stocksymbols=''

            loaddbConn
            loadLookup
    end

It looks like you want to use an optional parameter

try:

def initialize(back_testing=nil)
@exchanges = “”
@industries = “”
@sectors = “”
@stock_symbols = “”
@dbcon = back_testing ? DbAccess.new(@back_test_db) : load_db_con
load_lookup
end

I think this will do what you’d expect it to do

new() will call load_db_con, new(true) would be calling your
back_test_db

====

I am a little bit concerned with the way you’ve organized this class,
but hopefully this will at least show three things.

  1. How to use optional parameters

  2. ruby_style instead of javaStyle

  3. note that I split up the assignment for your instance variables?
    It is because they were pointing to the same object.

a = b = “foo”
=> “foo”
a.replace “bar”
=> “bar”
b
=> “bar”