如何干燥很多模块延伸

时间:2013-03-06 09:58:18

标签: ruby module

目前我的代码中有这个结构:

module Mappers
  extend ActiveSupport::Autoload    
  ...

  module Login
    extend ActiveSupport::Autoload
    ...
  end

  module Admuser
    extend ActiveSupport::Autoload
    ...
  end

  module Admsubdevice
    extend ActiveSupport::Autoload
    ...
  end

  module Admdevice
    extend ActiveSupport::Autoload
    ...
  end
end

我必须扩展每个模块以使用自动加载功能。

有没有办法只扩展模块一次才能拥有此功能?

2 个答案:

答案 0 :(得分:1)

def module_with_autoload &proc
  Module.new{extend ActiveSupport::Autoload ; proc.call}
end

Mappers = module_with_autoload do
  ...

  Login = module_with_autoload do
    ...
  end

  Admuser = module_with_autoload do
    ...
  end

  Admsubdevice = module_with_autoload do
    ...
  end

  Admdevice = module_with_autoload do
    ...
  end
end

答案 1 :(得分:0)

我认为这个解决方案更紧凑:

[Mappers, Mappers::Login, Mappers::Admuser, Mappers::Admsubdevice, Mappers::Admdevice].each do |m|
  m.extend ActiveSupport::Autoload
end