如何在active_support中使用自动加载方法

时间:2011-11-15 15:01:22

标签: ruby-on-rails ruby

F:\应用\ a.rb

require 'rubygems'
require 'active_support'

module A
  extend ActiveSupport::Autoload
  autoload :B,'F:\app\test\b'
end

F:\应用\一个\ b.rb

module A
  class B
  end
end

在irb中:

require 'f:\app\a'
A::B

=> NameError:未初始化的常量A :: B

哪个地方我错了?

2 个答案:

答案 0 :(得分:2)

声明autoload时,指定的路径必须相对于$LOAD_PATH$:中的路径,即相同的简写别名。由于autoload内置于Ruby,因此不需要ActiveSupport。 Autoload库实际上做了许多其他与此无关的事情,基本上使autoload更智能但功能相似。

我认为你不能像在这里一样使用绝对路径。

通常你会看到这些定义为:

autoload(:B, 'a/b')

这是因为您已经定义了加载路径:

$LOAD_PATH << 'F:\app'

答案 1 :(得分:0)

尝试使用加载而不是自动加载。