如何通过gem

时间:2016-05-15 04:01:35

标签: ruby rubygems

要向核心类添加方法,我通过以下方式创建了一个空白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

我了解文件未加载,如何加载文件?

1 个答案:

答案 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'