Ruby 组织宝石结构
我写gem,它是对Ruby 组织宝石结构,ruby,gem,metaprogramming,faker,Ruby,Gem,Metaprogramming,Faker,我写gem,它是对fakergem的补充(具有俄罗斯的功能,如税收和增值税等) 因此,我遇到了一个问题:每段代码都很大,所以我需要将其拆分为逻辑部分 IE我有Inn功能,称为Faker::russic.Inn() 所以,我写 Dir['faker/russian/*.rb'].each { |file| require file } module Faker class Russian extend Inn end end 否则我有(在faker/俄语/inn.rb)这个文件
faker
gem的补充(具有俄罗斯的功能,如税收和增值税等)
因此,我遇到了一个问题:每段代码都很大,所以我需要将其拆分为逻辑部分
IE我有Inn
功能,称为Faker::russic.Inn()
所以,我写
Dir['faker/russian/*.rb'].each { |file| require file }
module Faker
class Russian
extend Inn
end
end
否则我有(在faker/俄语/inn.rb
)这个文件(这是必需的)
module Inn
def inn ; puts 'inn goes here' ; end
end
但是我有一个错误:lib/faker/russian.rb:5:in':未初始化的常量faker::russian::Inn(namererror)
如何避免此错误并成功地自动包含代码和扩展所有连接的模块?选项1是在扩展时引用顶级命名空间
extend ::Inn
选项2是使用正确的名称空间定义Inn
module Faker
module Russian
module Inn
def inn; end
end
end
end
在一个gem中,选项2最好将所有模块命名在这个gem的顶级模块下。想象一下,如果您使用选项1,并且在应用程序中有一个Inn模块,但没有gem,您将遇到问题。选项1是在扩展时引用顶级命名空间
extend ::Inn
选项2是使用正确的名称空间定义Inn
module Faker
module Russian
module Inn
def inn; end
end
end
end
在一个gem中,选项2最好将所有模块命名在这个gem的顶级模块下。想象一下,如果您使用选项1,并且在应用程序中有一个Inn模块,但没有gem,您将遇到问题。选项1是在扩展时引用顶级命名空间
extend ::Inn
选项2是使用正确的名称空间定义Inn
module Faker
module Russian
module Inn
def inn; end
end
end
end
在一个gem中,选项2最好将所有模块命名在这个gem的顶级模块下。想象一下,如果您使用选项1,并且在应用程序中有一个Inn模块,但没有gem,您将遇到问题。选项1是在扩展时引用顶级命名空间
extend ::Inn
选项2是使用正确的名称空间定义Inn
module Faker
module Russian
module Inn
def inn; end
end
end
end
在一个gem中,选项2最好将所有模块命名在这个gem的顶级模块下。想象一下,如果您使用选项1,并且在应用程序中有一个Inn模块,但没有gem,您将遇到问题。我使用第二种方式,但仍然得到以下结果:
”:未初始化的常量Faker::俄语::Inn(NameError)
第一种方式也不起作用。我得到”:未初始化的常量Inn(namererror)
。也许我不需要文件?我明白了。#2中存在名称冲突。模块名为“俄语”,而类名也为“俄语”。给他们合适的名字,他们应该会没事。我使用第二种方法,但仍然得到这样的结果:”:未初始化的常量Faker::俄语::Inn(namererror)
第一种方法也不起作用。我得到”:未初始化的常量Inn(namererror)
。也许我不需要文件?我明白了。#2中存在名称冲突。模块名为“俄语”,而类名也为“俄语”。给他们合适的名字,他们应该会没事。我使用第二种方法,但仍然得到这样的结果:”:未初始化的常量Faker::俄语::Inn(namererror)
第一种方法也不起作用。我得到”:未初始化的常量Inn(namererror)
。也许我不需要文件?我明白了。#2中存在名称冲突。模块名为“俄语”,而类名也为“俄语”。给他们合适的名字,他们应该会没事。我使用第二种方法,但仍然得到这样的结果:”:未初始化的常量Faker::俄语::Inn(namererror)
第一种方法也不起作用。我得到”:未初始化的常量Inn(namererror)
。也许我不需要文件?我明白了。#2中存在名称冲突。模块名为“俄语”,而类名也为“俄语”。给他们起个合适的名字,他们就没事了。