У меня есть класс (BaseClass) и подкласс (SubClass), который наследуется от BaseClass. Одна из операций, которые я хочу выполнить, - это отправлять запросы из базы в Sub, но только если для нее определен метод. Позвольте мне продемонстрировать это с некоторым кодом:проверить, существует ли метод в подклассе
BaseClass:
def extract_data extracted_data=Hash.new
['attr1','attr2','attr3'].each do |attr|
extracted_data[attr] = self.send("extract_#{attr}")
end
return extracted_data
end
Подкласс:
def extract_attr1
# do something and return a value
end
Это работает втирают хорошо, если есть метод с таким именем в определенный в Подкласс. Если он не определен, я получу ошибку. Как проверить, что метод определен в подклассе перед его вызовом?
Некоторые программисты на Ruby не нравится метод '#respond_to?', Так как его некоторые применения являются признаком * куриной набрав *. В этом конкретном случае, '#respond_to?' Мне нравится, но некоторые могут предпочесть обработку исключений NoMethodError'. –
@BorisStitnicky Вы подразумеваете 'self.send (" extract _ # {attr} ") rescue NoMethodError'. BTW, что такое * цыпленок, набирающий *? –
Вкратце: 'do_something(), если self.respond_to ('some_possible_function')' – Eddie