无法从模块访问方法?

时间:2013-12-16 01:59:38

标签: ruby module nameerror

我包含了其他人的模块,它似乎是分散在多个文件中的。它看起来像这样:

alfred.rb:

require 'alfred/ui'

module Alfred
  <code>
end

阿尔弗雷德/ ui.rb:

module Alfred
  class Logger
    def info(msg)
      logger.info msg
    end
  end
end

我正在尝试使用以下语法从我的代码中访问info方法,该代码位于顶部require "alfred"

Alfred::Logger.info("my message")

无效,会产生#<NameError: uninitialized constant Alfred::Logger>

其次,如果有人能够解释如何确切地说Ruby“构建”一个分散在这样的几个文件中的模块,我会很高兴。 alfred/ui.rb的代码是否包含在alfred.rb行末require的末尾?这一切都以其他方式组合在一起吗?也许它甚至不重要,但似乎它会帮助我更好地包围它。

我正在使用的模块的完整代码是at Github,以防有人感兴趣。

有人可以帮助解释为什么我不能以这种方式使用该方法,以及可以采取哪些措施来解决它?

1 个答案:

答案 0 :(得分:0)

#info是一个实例方法,这意味着它只存在于Logger类的实例上。如果你想直接从你的代码中调用它,你可以调用Alfred::Logger.new.info "some message",但这看起来有点奇怪。通常这种类型的东西由库内部使用。

如果它被定义为类方法:

module Alfred   
  class Logger   
    def self.info(msg)  
      logger.info msg   
    end   
  end
end  

然后你可以在尝试时调用它。