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_methodMyBaseMyBaseself.class_b_method

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