如何在另一个模块中使用Ruby模块?

时间:2014-05-02 00:11:26

标签: ruby

此代码似乎不起作用 - 它无法弄清楚some_func是否已定义。为什么不呢?

# in file 1
def ModuleA
  def some_func
    "boo"
  end
end

# in file 2
def ModuleB
  include ModuleA

  MY_CONSTANT = some_func
end

2 个答案:

答案 0 :(得分:1)

您声明模块错误,需要extend而不是include

module ModuleA
  def some_func
    "boo"
  end
end

module ModuleB
  extend ModuleA
  MY_CONSTANT = some_func
end

答案 1 :(得分:1)

在您的代码示例中,您使用include指令。

这意味着ModuleA中定义的所有方法都作为实例方法包含在ModuleB中。

但是,通过在some_func的模块主体中调用ModuleB,您尝试调用它,就像在{{1}上将其定义为类方法一样(不是,因为你之前使用过ModuleB)。

如果您确实想要将其定义(并调用)为类方法,则需要在include内使用extend ModuleA来添加方法定义。