Ruby 从模块访问方法时出现问题?
我包含了其他人的模块,它似乎被分割成多个文件。它看起来像这样: alfred.rb: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:
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哦,有趣的是,自从我上次下载该类以来,该类似乎已经更新了。今晚在家的时候,我会下载最新的,然后试一试。