Ruby 使用extend-ActiveSupport::Concern
我正在研究CodeSchool的RubyBits,我遇到了一个我不理解的练习:“确保AtariLibrary类只包含LibraryUtils模块,并让ActiveSupport::Concern负责加载其依赖项。然后,在LibraryUtils上重构self.include方法以使用include方法” 根据下面的解决方案,似乎Ruby 使用extend-ActiveSupport::Concern,ruby,activesupport,Ruby,Activesupport,我正在研究CodeSchool的RubyBits,我遇到了一个我不理解的练习:“确保AtariLibrary类只包含LibraryUtils模块,并让ActiveSupport::Concern负责加载其依赖项。然后,在LibraryUtils上重构self.include方法以使用include方法” 根据下面的解决方案,似乎ActiveSupport::Concern不负责加载依赖项-您需要在LibraryUtils中包含LibraryLoader 您能否帮助我了解一下ActiveSuppo
ActiveSupport::Concern
不负责加载依赖项-您需要在LibraryUtils中包含LibraryLoader
您能否帮助我了解一下ActiveSupport::Concern
正在做什么,以及为什么需要在这两个模块中通过extend
调用它
module LibraryLoader
extend ActiveSupport::Concern
module ClassMethods
def load_game_list
end
end
end
module LibraryUtils
extend ActiveSupport::Concern
include LibraryLoader
#result of refactoring the self.included method
included do
load_game_list
end
end
class AtariLibrary
include LibraryUtils
end
谢谢 当您调用
extend-ActiveSupport::Concern
时,它将查找ClassMethods内部模块,并使用该模块扩展您的“host”类。然后,它将为您提供一个包含的方法,您可以将一个块传递给:
包括您自己
某些函数
结束
included
方法将在所包含类的上下文中运行。如果您有一个模块需要另一个模块中的函数,ActiveSupport::Concern
将为您处理依赖关系
module LibraryLoader
extend ActiveSupport::Concern
module ClassMethods
def load_game_list
end
end
end
module LibraryUtils
extend ActiveSupport::Concern
include LibraryLoader
#result of refactoring the self.included method
included do
load_game_list
end
end
class AtariLibrary
include LibraryUtils
end