我有一个名为private_lib
的宝石。
文件lib/private_lib.rb
包含以下内容:
require 'private_lib/version'
require 'private_lib/handicap'
require 'private_lib/traversal_cap'
module PrivateLib
end
lib/private_lib/handicap.rb
文件包含以下内容
# module for handicap functions
class Handicap
include TraversalCap
-- other code
end
文件lib/private_lib/traversal_cap.rb
包含以下内容
module TraversalCap
def some_method
end
-- other code
end
我还有一个测试文件spec/handicap_spec.rb
,其中包含以下内容
require "spec_helper"
describe Handicap do
include TraversalCap
-- some tests that access the ```Handicap``` class
-- some tests that access directly the traversal_cap some_method.
end
运行rspec spec/handicap_spec
时,出现以下错误
private_lib/lib/private_lib/handicap.rb:3:in `<class:Handicap>': uninitialized constant Handicap::TraversalCap (NameError)
from private_lib/lib/private_lib/handicap.rb:2:in `<top (required)>'
障碍类为什么没有看到traversal_cap模块?
答案 0 :(得分:1)
这是因为您需要文件的顺序。
在运行行require 'private_lib/handicap'
时,它会读取handicap.rb
文件并命中您include TraversalCap
所在的行。但是您目前尚未运行require 'private_lib/traversal_cap'
,因此该模块未定义。
快速解决方案是更改require
调用的顺序,或者将require 'private_lib/traversal_cap'
放在让分文件的顶部。