我写的是宝石,它是faker
宝石的补充(俄语函数,如tax& vat 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
所有连接的模块?
答案 0 :(得分:3)
选项1是在扩展
时引用顶级命名空间extend ::Inn
选项2是定义具有正确名称空间的Inn
module Faker
module Russian
module Inn
def inn; end
end
end
end
在gem选项2中,首选将所有模块命名为此gem的顶级模块。想象一下,如果你使用选项1并在应用程序中有一个Inn模块而不是gem,那么你就会遇到问题。