2016-05-15 5 views
-1

により、コアクラスにメソッドを追加するためにはどのようにすることにより、ブランク宝石を作成しました。コアクラスにメソッドを追加するには宝石

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

が存在しない場合は、MyGem::CoreExt::Arrayを定義することができないため、ここでモジュールをどのように定義しているかが問題です:module MyGem::CoreExt::Array

my_gem/core_ext/array.rb

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

それとも、単にMyGem::CoreExt::ArrayMyGem::CoreExtを定義します。IRB

require 'my_gem' 

[].foo # Should output 'foo' 

module MyGem::CoreExt 
end 

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

class Array 
    include MyGem::CoreExt::Array 
end 

関連する問題