如何在Ruby中将模块级函数导入类实例?

时间:2013-03-05 04:39:54

标签: ruby

module AA
  def func1()
  end

  class BB
    def method2()
      func1()
    end
  end

end

目前method2无法找到func1并引发异常。

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

3 个答案:

答案 0 :(得分:1)

出现这种情况有几个原因。

首先,因为属于AA模块的内容不属于BB类。

其次,定义func1的语法不太正确。

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

module AA
  def self.func1
  end

  def AA.func2
  end

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

或者您可以使用extend

module AA
  def func1()
  end

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

  end
end