在类中使用模块方法

问题描述 投票:0回答:2

我有

/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目录以进行配置。

我怎么能做到这一点?

ruby
2个回答
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在你试图称之为的时候并没有定义。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.