在子类中调用父方法

时间:2013-07-30 12:36:14

标签: ruby oop

我正在学习Ruby的对象模型。我写过这个剧本:

#/usr/bin/ruby

module MyModule

  class MyBase
    def class_b_method
      puts "class_b_method called"
    end
  end

  class MyClass < MyBase
    attr_accessor :name

    class_b_method

    def set_name(name)
      @name = "My name is #{name}"
    end

    def display_name
      return @name
    end    
  end   
end

obj = MyModule::MyClass.new
obj.set_name "Martin"
puts obj.display_name

运行上面的代码我收到此错误:

module.rb:13: undefined local variable or method `class_b_method' for MyModule::MyClass:Class (NameError)

我正在尝试在类MyClass中调用父方法。我做错了什么?

1 个答案:

答案 0 :(得分:2)

在课程MyClass内,自我为MyClass。但您将class_b_method定义为类MyBase内的实例方法,即。可以由类MyBase的实例调用的方法,不能由类本身调用。所以self.class_b_method会抛出一个合理的错误。为了使你的代码可行,请按如下方式编写方法:

class MyBase
  def self.class_b_method
      puts "class_b_method called"
  end
end