Man*_*rer 5 ruby ruby-on-rails require nameerror
我有一个非常奇怪的错误,我无法解开.
基本上,我在我的lib文件夹中有这个类:
# lib/api/amazon.rb
module API
class Amazon
...
end
end
Run Code Online (Sandbox Code Playgroud)
当我想在某个地方使用它时,我require:
require 'api/amazon'
API::Amazon.do_stuff
Run Code Online (Sandbox Code Playgroud)
这最初是有效的,但过了一段时间它会破坏和提升NameError: uninitialized constant API::Amazon.当我调试它并require在引发错误时再次尝试该文件时,它返回false,表明该文件已经加载.我也可以在$"(这个加载文件列表)中看到它.为什么我不能访问API::Amazon?
注意:我添加了"API"作为首字母缩略词,ActiveSupport::Inflector这就是为什么我不必使用"Api":
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'API'
end
Run Code Online (Sandbox Code Playgroud)
编辑:
我也尝试::API::Amazon.do_stuff过,结果相同.
我编写了一些代码,旨在获得与您相同的结果,也许它可以提供一些线索。
尝试临时.rb:
module API
class Amazon
def hello
puts "API::Amazon initially works well"
$stdout.flush
end
end
end
s = API::Amazon.new
s.hello
p API.constants
API = Module.new
p API.constants # Here you can see constant Amazon disappers from module API
s = API::Amazon.new
s.hello
Run Code Online (Sandbox Code Playgroud)
它最初运行良好,然后得到相同的错误,“未初始化的常量 API::Amazon (NameError)”:
$ ruby trytemp.rb
API::Amazon initially works well
[:Amazon]
trytemp.rb:15: warning: already initialized constant API
[]
trytemp.rb:19:in `<main>': uninitialized constant API::Amazon (NameError)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |