检查子类中是否存在方法

时间:2014-02-21 15:16:08

标签: ruby-on-rails ruby

我有一个类(BaseClass)和一个继承自BaseClass的子类(SubClass)。我想要执行的操作之一是将请求从Base发送到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

如果在子类中定义了具有该名称的方法,则这完全可以正常工作。如果未定义,我将收到错误。如何在调用方法之前检查方法是否在子类中定义?

1 个答案:

答案 0 :(得分:7)

使用Object#respond_to?

撰写如下
extracted_data[attr] = self.send("extract_#{attr}") if self.respond_to?("extract_#{attr}")