首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模块访问方法的问题?

从模块访问方法的问题?
EN

Stack Overflow用户
提问于 2013-12-16 01:59:38
回答 1查看 53关注 0票数 1

我包括了其他人的模块,它似乎被分割成多个文件。看起来是这样的:

alfred.rb:

代码语言:javascript
复制
require 'alfred/ui'

module Alfred
  <code>
end

阿尔弗雷德/鲁伊布:

代码语言:javascript
复制
module Alfred
  class Logger
    def info(msg)
      logger.info msg
    end
  end
end

我试图从代码中访问info方法,代码顶部有require "alfred",使用以下语法:

代码语言:javascript
复制
Alfred::Logger.info("my message")

这是不起作用的,并导致#<NameError: uninitialized constant Alfred::Logger>

其次,我希望有人能解释一下Ruby是如何“构造”一个模块,该模块被分割成这样的几个文件。来自alfred/ui.rb的代码是否包含在alfred.rb的末尾,在require行的起始位置?这一切都是以其他方式组合在一起的吗?也许这根本不重要,但它似乎会帮助我更好地处理它。

我使用的模块的完整代码是在吉突布,以防有人感兴趣。

有人能帮我解释一下为什么我不能这样使用这个方法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-16 02:06:12

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

如果它被定义为类方法:

代码语言:javascript
复制
module Alfred   
  class Logger   
    def self.info(msg)  
      logger.info msg   
    end   
  end
end  

那你就可以在你尝试的时候叫它了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20602315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档