我有
/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目录以进行配置。
我怎么能做到这一点?
听起来这个故事还有更多。您作为示例提供的代码按原样运行,没有错误:
$ 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
在你试图称之为的时候并没有定义。
在定义我在其中使用的方法之前,问题是需要该文件。在定义b.rb
之前我要求A::foo
。