2014-06-23 36 views
0

我寫的寶石的結構,它是除了faker寶石(與像稅收&增值稅et.c.俄語功能)整理寶石

所以,我有一個煩惱:每一段代碼是大,所以我需要將它分成邏輯部分。

IE我有Inn功能爲Faker::Russian.inn()

所以,我寫的叫

Dir['faker/russian/*.rb'].each { |file| require file } 

module Faker 
    class Russian 
    extend Inn 
    end 
end 

否則我(在faker/russian/inn.rb)(這是必需的)這個文件

module Inn 
    def inn ; puts 'inn goes here' ; end 
end 

但是我有一個錯誤:lib/faker/russian.rb:5:in <class:Russian>': uninitialized constant Faker::Russian::Inn (NameError)

如何避免此錯誤並自動成功地包含所有連接模塊的代碼和extend

回答

3

選項1是指頂層名字空間延伸時

extend ::Inn 

選項2是用正確的名稱空間

module Faker 
    module Russian 
    module Inn 
     def inn; end 
    end 
    end 
end 

限定酒店在寶石選項2優選具有命名空間的所有模塊在這個寶石的頂級模塊下。試想一下,如果您使用選項1並在應用程序中使用Inn模塊,但不是寶石,則會遇到問題。

+0

我使用第二種方法,仍然得到這個:'':未初始化的常量Faker :: Russian :: Inn(NameError)' – asiniy

+0

第一種方式不起作用。我得到'':未初始化的常量Inn(NameError)'。也許我不需要文件? – asiniy

+0

我明白了。 #2中存在名稱衝突。該模塊被命名爲「俄語」,而類名稱也是「俄語」。給他們合適的名字,他們應該沒問題。 –