要向核心类添加方法,我通过以下方式创建了一个空白gem:
bundle gem my_gem
然后编辑.gemspec
并创建lib/my_gem/core_ext/array.rb
文件。
module MyGem::CoreExt::Array
def foo
p 'foo'
end
end
class Array
include MyGem::CoreExt::Array
end
然后我需要来自lib/my_gem.rb
的文件。
require 'my_gem/core_ext/array.rb'
然后按bundle exec irb
> MyGem
=> MyGem
> [1,2,3].foo
NoMethodError: undefined method `foo' for [1, 2, 3]:Array
> MyGem::CoreExt::Array
NameError: uninitialized constant MyGem::CoreExt
我了解文件未加载,如何加载文件?
答案 0 :(得分:0)
您的问题是您在此处定义模块的方式:module MyGem::CoreExt::Array
,因为在MyGem::CoreExt::Array
不存在时您无法定义MyGem::CoreExt
。
<强> my_gem / core_ext / array.rb 强>
module MyGem
module CoreExt
module Array
def foo
p 'foo'
end
end
end
end
或者,只需在MyGem::CoreExt
之前定义MyGem::CoreExt::Array
:
module MyGem::CoreExt
end
module MyGem::CoreExt::Array
def foo
p 'foo'
end
end
class Array
include MyGem::CoreExt::Array
end
在IRB中
require 'my_gem'
[].foo # Should output 'foo'