I’m very new to Ruby..consider the code below I kind repeat the if else statement in every sub class. Is there a way to group this into superclass’s initializer? Thanks for any help!
class TreeItem
def TreeItem.new(*args)
if self== TreeItem
raise "Attempt to create TreeItem"
else
super
end
end
def initialize(data)
@data=data
end
def raise_error(data)
raise "Attempt to create #{self.class} with #{data.class} object"
end
def toString()
raise "Abstract method toString() not implemented #{self}"
end
end
class IntItem <TreeItem
def initialize(data)
if data.kind_of? Integer
super(data)
else
raise_error(data)
end
end
end
class StringItem < TreeItem
def initilize(data)
if data.kind_of? String
super(data)
else
raise_error(data)
end
end
You can write abstract method (I named it
data_class) for this:With this implementation if you will attempt to create TreeItem instance, you will get
method undefinederror (you can also implement customdata_classin theTreeItemto raise more specific exception).