我有
/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目录。
我该怎么做?
答案 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_relative
和a.rb
之前,您在module A
中进行的A.foo
调用是 -这意味着a/b.rb
中的代码先于代码运行在a.rb
中使用,因此实际上A.foo
尚未真正定义。
答案 1 :(得分:0)
问题是在定义我在其中使用的方法之前需要文件。
在定义b.rb
之前,我需要A::foo
。