मैं रूबी के साथ खेल रहा हूं और ओओ तकनीकों और विरासत के बारे में सीख रहा हूं और अंततः मुझे एक त्रुटि हुई है जो मुझे थोड़ी देर के लिए दूर कर चुकी है।रूबी विरासत - सुपर तर्कों की गलत संख्या प्राप्त करना आरंभ करें
व्यक्ति कक्षा
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
प्रोग्रामर क्लास (व्यक्ति से विरासत)
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
फिर अपने मुख्य लिपि में यह इस के साथ इस लाइन
...
programmer = Programmer.new('Frank', 'Montero', 46, false, 20)
...
पर विफल रहने के है त्रुटि
./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
एक विशेष सूचना: मेरी माता पिता वर्ग कोई तर्क ले लिया है, अपने बच्चे को एक ले लिया। मैंने सोचा कि क्यों बच्चे का 'सुपर' 'प्रारंभिक' से 'Parent.initialize' तक तर्क में गुजर रहा था, जब मुझे एहसास हुआ कि मुझे 'सुपर()' का उपयोग करना चाहिए, जो स्पष्ट रूप से माता-पिता को * कोई तर्क * के साथ कॉल नहीं करता है। – Droogans
@ डुओगन: thx! सुपर() स्पष्ट संश्लेषण के साथ सुपर से अलग है। – JCLL