包含模块在 gem 中不工作
Include module not working in gem
我有一个叫 private_lib
的 gem。
文件 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)>'
为什么障碍 class 看不到 traversal_cap 模块?
这是因为您需要文件的顺序。
当行 require 'private_lib/handicap'
为 运行 时,它会读取 handicap.rb
文件并找到您 include TraversalCap
所在的行。但是此时你还没有 运行 require 'private_lib/traversal_cap'
所以模块是未定义的。
快速修复是更改 require
调用的顺序,或者将 require 'private_lib/traversal_cap'
放在让分文件的顶部。
我有一个叫 private_lib
的 gem。
文件 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)>'
为什么障碍 class 看不到 traversal_cap 模块?
这是因为您需要文件的顺序。
当行 require 'private_lib/handicap'
为 运行 时,它会读取 handicap.rb
文件并找到您 include TraversalCap
所在的行。但是此时你还没有 运行 require 'private_lib/traversal_cap'
所以模块是未定义的。
快速修复是更改 require
调用的顺序,或者将 require 'private_lib/traversal_cap'
放在让分文件的顶部。