2013-07-30 122 views
1

我正在学习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内父类的方法。我做错了什么?

回答

2

内部类MyClass,自己是MyClass。但是您将class_b_method定义为类MyBase中的实例方法,方法可以由类MyBase的实例调用,不能由类本身调用。所以self.class_b_method抛出一个合法error.To使你的代码编写可行如下方法:

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

感谢您的解释 –

+2

如果这个回答你的问题,你应该接受它,所以他得到更多的代表 – Doydle