NameError:未初始化的常量错误

时间:2015-12-10 19:31:52

标签: ruby

给出以下代码:

Test
Base

这可以按预期工作,输出:

# lib/backup.rb
require_relative 'backup/destination/base'

module Backup; end


# lib/backup/destination/base.rb
require_relative 'test'

module Backup
  module Destination
    class Base
      def initialize
        puts 'Base'
      end
    end
  end
end


# lib/backup/destination/test.rb
module Backup
  module Destination
    class Test < Base
      def initialize
        puts 'Test'
        super
      end
    end
  end
end

但是,如果我这样分开:

require_relative 'lib/backup'

并执行以下(来自irb):

NameError: uninitialized constant Backup::Destination::Base
    from /lib/backup/destination/test.rb:3:in `<module:Destination>'
    from /lib/backup/destination/test.rb:2:in `<module:Backup>'
    from /lib/backup/destination/test.rb:1:in `<top (required)>'
    from /lib/backup/destination/base.rb:1:in `require_relative'
    from /lib/backup/destination/base.rb:1:in `<top (required)>'
    from /lib/backup.rb:1:in `require_relative'
    from /lib/backup.rb:1:in `<top (required)>'
    from (irb):1:in `require_relative'

我收到此错误:

var submits = "=" + JSON.stringify(data);

$.ajax({
            type: "POST",
            url: serviceURL,
            data: submits
});

我错过了什么?

注意:如果不添加更多详细信息,我无法发布上述内容。愚蠢的功能,因为在这种情况下代码值得千言万语。 (此文本允许发布问题)

2 个答案:

答案 0 :(得分:1)

问题在于,在定义test.rb课程之前,您需要Base。一种可能的解决方案是将您的需求移至base.rb的底部。

另一种可能的解决方案是从base中删除您的要求,并从backup开始按正确的顺序要求这两个文件。

答案 1 :(得分:0)

进行了以下更改以解决问题:

# lib/backup.rb
require_relative 'backup/destination/base'
require_relative 'backup/destination/test'

module Backup; end

require_relative删除了lib/backup/destination/base.rb声明。这修复了require_relative语句的顺序。我错误地认为在执行任何操作之前都需要这些文件。