我包括了其他人的模块,它似乎被分割成多个文件。看起来是这样的:
alfred.rb:
require 'alfred/ui'
module Alfred
<code>
end阿尔弗雷德/鲁伊布:
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行的起始位置?这一切都是以其他方式组合在一起的吗?也许这根本不重要,但它似乎会帮助我更好地处理它。
我使用的模块的完整代码是在吉突布,以防有人感兴趣。
有人能帮我解释一下为什么我不能这样使用这个方法吗?
发布于 2013-12-16 02:06:12
#info是一个实例方法,意味着它只存在于Logger类的实例中。如果您想直接从代码中调用它,可以调用Alfred::Logger.new.info "some message",但这似乎有点奇怪。通常这种类型的东西是由库内部使用的。
如果它被定义为类方法:
module Alfred
class Logger
def self.info(msg)
logger.info msg
end
end
end 那你就可以在你尝试的时候叫它了。
https://stackoverflow.com/questions/20602315
复制相似问题