Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从模块访问方法时出现问题?_Ruby_Module_Nameerror - Fatal编程技术网

Ruby 从模块访问方法时出现问题?

Ruby 从模块访问方法时出现问题?,ruby,module,nameerror,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方法,该代码要求alfred位于顶部,使用以下语法: Alfred:

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

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方法,该代码要求alfred位于顶部,使用以下语法:

Alfred::Logger.info("my message")
这是不工作的,并导致

其次,如果有人能解释一下Ruby是如何构造一个模块的,它是如何被拆分成几个文件的,我会很高兴的。alfred/ui.rb中的代码是否包含在require行开头的alfred.rb末尾?这一切是以其他方式组合在一起的吗?也许这根本不重要,但它似乎能帮助我更好地理解它

我正在使用的模块的完整代码以防有人感兴趣

有人能解释一下为什么我不能这样使用这个方法,以及可以做些什么来修复它吗?

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

如果它被定义为类方法:

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

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

对于您的代码,您可以尝试以下操作:@my_logger=Alfred::logger.new位于代码顶部,然后执行@my_logger.info foo!啊,谢谢你的解释。我脑子里的实例/类方法颠倒了。但是,我仍然无法使用您提供的语法实例化记录器。我得到了与以前相同的未初始化常量Alfred::Logger错误。对此有什么想法吗?我得到另一个错误名称Alfred::Logger:Class`:undefined method info`。从哪里调用?但是在guthub repo中,我没有看到Alfred模块中Logger类的定义。我只使用类LogUI<::记录器。。。试试Alfred::LogUI.infomy message哦,有趣的是,自从我上次下载该类以来,该类似乎已经更新了。今晚在家的时候,我会下载最新的,然后试一试。