我包含了其他人的模块,它似乎是分散在多个文件中的。它看起来像这样:
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,以防有人感兴趣。
有人可以帮助解释为什么我不能以这种方式使用该方法,以及可以采取哪些措施来解决它?
答案 0 :(得分:0)
#info
是一个实例方法,这意味着它只存在于Logger类的实例上。如果你想直接从你的代码中调用它,你可以调用Alfred::Logger.new.info "some message"
,但这看起来有点奇怪。通常这种类型的东西由库内部使用。
如果它被定义为类方法:
module Alfred
class Logger
def self.info(msg)
logger.info msg
end
end
end
然后你可以在尝试时调用它。