0

私は宝石を書きます、それは宝石への追加fakerです(税金や付加価値税などのロシア語の機能を備えています)

だから、私は問題を抱えています.コードのすべての部分は大きいので、論理的な部分に分割する必要があります.

IEInnとして呼び出される機能があります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接続されているすべてのモジュールを自動的に含めるにはどうすればよいですか?

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 を使用し、app に Inn モジュールがあり、gem がない場合、問題が発生することを想像してください。

于 2014-06-23T16:46:44.267 に答える