I'm playing with Ruby and learning about OO techniques and inheritance and I've finally hit an error that has eluded me for awhile.
Person Class
class Person
attr_accessor :fname, :lname, :age
def has_hat?
@hat
end
def has_hat=(x)
@hat = x
end
def initialize(fname, lname, age, hat)
@fname = fname
@lname = lname
@age = age
@hat = hat
end
def to_s
hat_indicator = @hat ? "does" : "doesn't"
@fname + " " + @lname + " is " + @age.to_s + " year(s) old and " + hat_indicator + " have a hat\n"
end
def self.find_hatted()
found = []
ObjectSpace.each_object(Person) { |p|
person = p if p.hat?
if person != nil
found.push(person)
end
}
found
end
end
Programmer Class (inherits from Person)
require 'person.rb'
class Programmer < Person
attr_accessor :known_langs, :wpm
def initialize(fname, lname, age, has_hat, wpm)
super.initialize(fname, lname, age, has_hat)
@wpm = wpm
@known_langs = []
end
def is_good?
@is_good
end
def is_good=(x)
@is_good = x
end
def addLang(x)
@known_langs.push(x)
end
def to_s
string = super.to_s
string += "and is a " + @is_good ? "" : "not" + " a good programmer\n"
string += " Known Languages: " + @known_languages.to_s + "\n"
string += " WPM: " + @wpm.to_s + "\n\n"
string
end
end
Then in my main script It's failing on this line
...
programmer = Programmer.new('Frank', 'Montero', 46, false, 20)
...
With this error
./programmer.rb:7:in `initialize': wrong number of arguments (5 for 4) (ArgumentError)
from ./programmer.rb:7:in `initialize'
from ruby.rb:6:in `new'
from ruby.rb:6:in `main'
from ruby.rb:20
call super with required params instead calling super.initialize.
super(fname, lname, age, has_hat)
Programmer initialize should be -
def initialize(fname, lname, age, has_hat, wpm)
super(fname, lname, age, has_hat)
@wpm = wpm
@known_langs = []
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With