2016-08-26 20 views
1

私はCsvVerifyモジュールがどのように動作するかをスケッチしています。モジュールでインスタンス変数を使用しないようにするにはどうすればよいですか?

employee_csv_importer.rb(モジュールを使用して)

class EmployeeCsvImporter 
    include CsvVerify 

    headers 'ID', 'First Name', 'Last Name', 'Title or Department', 
    'Age', 'Native Language', 'Fluent in English?' 
end 

:アイデアはvirtusに触発されてこのような何かを移行する

インスタンス変数を持つモジュールが含まれますクラスをpoluteないようにする方法はありますcsv_verify.rb

module CsvVerify 
    puts "included" 

    def headers(*names) 
    @config = Config.new 
    end 
end 

config.rb

module CsvVerify 
    class Config 

    end 
end 

したがって、@configを使用してEmployeeCsvImporterを汚染しないように、これを再編成するにはどうすればよいですか?

PS。 これはまだ動作しません。
なぜこの出力にemployee_csv_importer.rbが実行されますか?

included 
/data/gems/csv_verify/examples/1_employees.rb:6:in `<class:EmployeeCsvImporter>': 
undefined method `headers' for EmployeeCsvImporter:Class (NoMethodError) 

答えて

1

私はあなたがmoduleinclude最初にせずに機能を書き始めることをお勧めしたいです。これは、特にあなたがRubyを初めて使用している場合に、構造体の形状を整えるのに役立ちます。

CsvVerifyを追加して追加したメソッドは、クラスメソッドではなくインスタンスメソッドとして追加されます。したがって、これはNoMethodErrorです。

+0

def self.headersも機能しません。ですから、CsvVerifyをクラスにして、EmployeeCsvImporterに継承させることをお勧めしますか?また、私はルビーには新しいものではなく、モジュールを書くことに就いています。決して他の言語でも同様の概念が見つからず、いつかそれをマスターする必要があります。 –

+0

あなたのクラスを '' 'header''メソッドを提供するモジュールで__extend__する必要があります。 まずクラスの全機能を書き出し、モジュールで分割する方法と必要性を決めておくことをお勧めします。 。 –

+0

ok拡張機能はありがたいですが、これは@configがクラス変数であることを意味していますか? –

関連する問題