我正在编写关于Code School的Ruby Bits课程,在第5级它们将涵盖模块。
在钩子方法部分,为LibraryUtils模块添加一个self.included方法钩子是一个挑战,它将扩展传入类中的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的codechool环境(浏览器)之外尝试这个时,我得到一个No Method Error:
atari_library.rb:27:in `<main>': undefined method `search_by_game_name' for #<AtariLibrary:0x2b07ef8> (NoMethodError)
请记住,我使用相同的代码。
好吧,如果有人对此有任何想法,我会非常感激。
答案 0 :(得分:0)
我唯一可以想到的是你做错了就是在AtariLibrary的一个实例而不是类上调用search_by_game_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)