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。我做错了什么?

4

1 回答 1

2

类内部MyClass,self是MyClass。但是你定义class_b_method为类内部的实例方法MyBase,即可以被类的实例调用的方法,MyBase不能被类本身调用。所以self.class_b_method抛出一个合法的错误。为了使您的代码可行,请编写如下方法:

class MyBase
  def self.class_b_method
      puts "class_b_method called"
  end
end
于 2013-07-30T12:40:02.810 回答