2013-07-30 167 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