0
module AA
  def func1()
  end

  class BB
    def method2()
      func1()
    end
  end

end

当前method2找不到func1并引发异常。

为什么会发生这种情况,正确的方法是什么?

4

3 回答 3

1

发生这种情况有几个原因。

首先,因为属于AA模块的东西不属于BB类。

其次,您要定义的语法func1并不完全正确。

请参阅下面的定义函数(2 种不同方式)和调用它的示例。

module AA
  def self.func1
  end

  def AA.func2
  end

  class BB
    def method2()
      AA::func1()
    end
  end
end
于 2013-03-05T04:45:08.247 回答
0

我遵循的方式是将模块包含在您的类定义中

 module AA
   def func1
     puts "func1"
     end
   class BB
    include AA
     def method2
      func1()
       end
     end
   end

这是一个模块混合策略,适用于模块外部或内部的任何类。请阅读 Mixin 部分:http ://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html

于 2013-03-05T04:49:37.130 回答
0

或者,您可以使用extend

module AA
  def func1()
  end

  class BB
    extend AA
    def method2()
      func1()
    end

  end
end
于 2013-03-05T04:51:30.207 回答