2016-05-15 72 views
-1

的方法添加到核心類添加到核心類的方法,我創建一個空白的寶石:如何通過寶石

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

你的問題是你如何在這裏定義你的模塊:module MyGem::CoreExt::Array因爲當MyGem::CoreExt不存在時你不能定義MyGem::CoreExt::Array

my_gem/core_ext/array.rb

module MyGem 
    module CoreExt 
    module Array 
     def foo 
     p 'foo' 
     end 
    end 
    end 
end 

或者,簡單地定義MyGem::CoreExtMyGem::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'