自动加载模块中的类

时间:2019-02-08 22:59:22

标签: ruby

在宝石中,我有一个文件

state

我正在尝试使用

自动加载
components/LoaList/__tests__/loaList.test.js

这会导致错误

prop

或者我也尝试过

#/lib/my_gem/dym/proximity.rb
module MyGem
   module Dym
     class Proximity
     end
   end
end

给出

module MyGem
   autoload 'Dym::Proximity', "my_gem/dym/proximity"
end

并且在任何情况下,NameError: autoload must be constant name: Dym::Proximity 都不是格式正确的符号。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

您一次只能自动加载一个模块级别,因此您需要引入一个中间文件。

让我工作的方法是引入一个名为lib/my_gem/dym.rb的文件,该文件会自动加载接近度:

# console.rb
require_relative 'lib/my_gem'
# lib/my_gem.rb
module MyGem
  autoload :Dym, "./lib/my_gem/dym.rb"

  puts "The Dym::Proximity module isn't yet loaded!"
  Dym::Proximity
  puts "The Dym::Proximity module has been successfully loaded!"
end
# lib/my_gem/dym.rb
module MyGem
  module Dym
    autoload :Proximity, "./lib/my_gem/dym/proximity.rb"
  end
end
# lib/my_gem/dym/proximity.rb
module MyGem
  module Dym
    class Proximity
      puts 'Dym::Proximity module is loading!'
    end
  end
end

使用以下文件,我得到以下输出:

ruby console.rb
The Dym::Proximity module isn't yet loaded!
Dym::Proximity module is loading!
The Dym::Proximity module has been successfully loaded!

因此,即使您必须引入一个中间文件,您仍然可以使用多个模块级别,它们将级联并自动加载。