在类内部使用模块方法

时间:2019-02-15 17:36:24

标签: ruby

我有

/a.rb

require_relative ‘a/b’
module A
  def self.foo
    "HA"
  end
end

/a/b.rb
module A
  class B
    VAR = A.foo * 3
  end
end

不幸的是,它作为A模块中的Undefined foo方法出错,我不知道为什么。 A主要用作命名空间,我决定在其中放置一些方法作为配置-它们实际上是出于配置目的而设置项目的根目录和root + / config目录。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

听起来像是这个故事还有更多。您作为示例给出的代码按原样运行,没有错误:

$ irb
2.5.1 :001 > module A
2.5.1 :002?>     def self.foo
2.5.1 :003?>         "HA"
2.5.1 :004?>       end
2.5.1 :005?>   end
 => :foo 
2.5.1 :006 > 
2.5.1 :007 > module A
2.5.1 :008?>     class B
2.5.1 :009?>         VAR = A.foo * 3
2.5.1 :010?>       end
2.5.1 :011?>   end
 => "HAHAHA" 
2.5.1 :012 > A.foo
 => "HA"

如果您所提到的代码是跨多个文件排列的,则问题的原因很可能是这些文件之间的交互方式。但是,没有更多信息,我将无法调试。


您已经在其中编辑了文件结构,因此问题已经很明显。在定义require_relativea.rb之前,您在module A中进行的A.foo调用是 -这意味着a/b.rb中的代码先于代码运行在a.rb中使用,因此实际上A.foo尚未真正定义。

答案 1 :(得分:0)

问题是在定义我在其中使用的方法之前需要文件。 在定义b.rb之前,我需要A::foo