在ruby 2.0中使用钩子方法时出现NoMethodError

在ruby 2.0中使用钩子方法时出现NoMethodError,ruby,ruby-2.0,Ruby,Ruby 2.0,我正在学习代码学校的Ruby Bits课程,在第5级,它们涉及模块 在钩子方法部分,为LibraryUtils模块添加一个自包含的方法钩子是一个挑战,它将扩展传入类上的ClassMethods。守则如下: module LibraryUtils def add_game(game) end def remove_game(game) end module ClassMethods def search_by_game_name(name) end e

我正在学习代码学校的Ruby Bits课程,在第5级,它们涉及模块

在钩子方法部分,为LibraryUtils模块添加一个自包含的方法钩子是一个挑战,它将扩展传入类上的ClassMethods。守则如下:

module LibraryUtils

  def add_game(game)
  end

  def remove_game(game)
  end

  module ClassMethods
    def search_by_game_name(name)
    end
  end
end

class AtariLibrary
  include LibraryUtils
  extend LibraryUtils::ClassMethods
end
非常简单。首先,在我们的模块中包括上述方法,如下所示:

def self.included(base)
  base.extend(ClassMethods)
end
然后去掉延长线,这样我们就不会有口是心非了

问题是,当我在Ruby 2.0的codeschool环境(浏览器)之外尝试此操作时,我得到一个无方法错误:

atari_library.rb:27:in `<main>': undefined method `search_by_game_name' for #<AtariLibrary:0x2b07ef8> (NoMethodError)
atari_library.rb:27:in`':未定义的方法“按游戏名称搜索”(NoMethodError)
请记住,我使用的是相同的代码


好的,如果有人对此有任何想法,我将不胜感激。

我能想到的唯一一件事是,您做错了,就是在AtariLibrary的实例上而不是类上调用search\u by\u game\u name,例如:

AtariLibrary.search_by_game_name('name') # => works

al = AtariLibrary.new
al.search_by_game_name('name') # undefined method `search_by_game_name' for #<AtariLibrary:0x007fe3e204ebb0> (NoMethodError)
AtariLibrary.search_by_game_name('name')#=>有效
al=AtariLibrary.new
al.search_by_game_name('name')#未定义的方法'search_by_game_name'for#(NoMethodError)

你能告诉我你是如何调用这个方法的吗?你在回答中已经知道了!我在做你展示的最下面(错误)的例子。ThanksClass方法是在类上调用的方法,因此在本例中,AtariLibrary是类的一个实例。您可以使用#new方法创建它的实例,该方法允许您调用实例方法;-)如果您不确定类和实例之间的区别,可能是签出:或者您不确定类方法为什么会变成类方法?可能是包含模块和扩展模块之间的区别?是的,我不知道类和实例方法之间的区别!你发布的链接很棒,帮助很大!!再次感谢你。