0

我写了 gem,它是 gem 的补充faker(具有俄罗斯功能,如 tax & vat 等)

所以,我有一个麻烦:每段代码都很大,所以我需要把它分成逻辑部分。

IE 我有Inn功能被称为Faker::Russian.inn()

所以,我写

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

module Faker
  class Russian
    extend Inn
  end
end

否则我有(at 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自动成功包含代码和所有连接的模块?

4

1 回答 1

3

选项 1 是在扩展时引用顶级命名空间

extend ::Inn

选项 2 是使用正确的命名空间定义 Inn

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

在 gem 选项 2 中,最好将所有模块命名在此 gem 的顶级模块下。想象一下,如果您使用选项 1 并且在应用程序中有一个 Inn 模块但没有 gem,您会遇到问题。

于 2014-06-23T16:46:44.267 回答