Вы можете написать абстрактный метод (я назвал его data_class
) для этого:
class TreeItem
def initialize(data)
if data.kind_of? data_class
@data = data
else
raise_error(data)
end
end
# ...
end
class IntItem <TreeItem
def data_class; Integer end
end
class StringItem < TreeItem
def data_class; String end
end
В этой реализации, если вы попытаетесь создать экземпляр TreeItem, вы получите ошибку method undefined
(вы также можете реализовать пользовательский data_class
в TreeItem
, чтобы вызвать более конкретное исключение).