0

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

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

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

有没有办法只扩展一次模块以具有此功能?

4

2 回答 2

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
于 2013-03-06T10:09:41.670 回答
0

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

[Mappers, Mappers::Login, Mappers::Admuser, Mappers::Admsubdevice, Mappers::Admdevice].each do |m|
  m.extend ActiveSupport::Autoload
end
于 2013-03-12T15:57:51.773 回答