ruby-on-rails - 如何在active_support中使用autoload方法

标签 ruby-on-rails ruby

F:\app\a.rb

require 'rubygems'
require 'active_support'

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

F:\app\a\b.rb

module A
  class B
  end
end

在IRB中:

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

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

我哪里错了?

最佳答案

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

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

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

autoload(:B, 'a/b')

这是因为您在某处定义了加载路径:

$LOAD_PATH << 'F:\app'

关于ruby-on-rails - 如何在active_support中使用autoload方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138355/

相关文章:

php - 使用 chef php cookbook 修改 php.ini 设置

ruby-on-rails - Rails 3 - 循环获取集合?

ruby-on-rails - 编辑表单中的序列化哈希?

ruby-on-rails - 设计允许用户更改密码

ruby-on-rails - 构建从belongs_to关联中提取的属性列表

ruby-on-rails - FactoryGirl 工厂具有返回带有字符串键的哈希的特征

ruby-on-rails - 如何在 Ruby 中 stub 请求/响应

ruby-on-rails - Rails 和 Authlogic。显示当前登录的用户

ruby-on-rails - 在 Azure 中通过 Docker bash 运行 Rails CLI 命令

ruby - Ruby 中赋值时的 bool 运算