Ruby on rails 检查子类中是否存在方法

Ruby on rails 检查子类中是否存在方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个从基类继承的类(基类)和一个子类(子类)。我要执行的操作之一是将请求从基发送到子,但前提是为其定义了一个方法。让我用一些代码来演示这一点: 基类: def extract_data extracted_data=Hash.new ['attr1','attr2','attr3'].each do |attr| extracted_data[attr] = self.send("extract_#{attr}") end return extracted_data en

我有一个从基类继承的类(基类)和一个子类(子类)。我要执行的操作之一是将请求从基发送到子,但前提是为其定义了一个方法。让我用一些代码来演示这一点:

基类

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
子类

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}”)拯救NoMethodError
。顺便说一句,什么是chicken类型?简而言之:
如果self.respond\u('some\u mable\u function')
@Eddie您在
respond\u to?
中没有问号。一些Ruby程序员不喜欢
\respond\u?
方法,因为它的某些用途是chicken类型的标志。在这种特殊情况下,
#respond#to?
对我来说似乎没问题,但有些人可能更喜欢
NoMethodError
异常处理。@BorisStitnicky您的意思是
self.send(“extract#{attr}”)拯救NoMethodError
。顺便说一句,什么是小鸡打字?简言之:
如果是self,就做点什么。回复('some\u mable\u function')
@Eddie你在
回复?
中没有问号。