如何避免在模块中使用实例变量?

时间:2016-08-26 12:05:05

标签: ruby module architecture instance-variables

我正在概述CsvVerify模块的工作原理。有没有办法不对包含具有实例变量

的模块的类进行轮询

创意受到virtus的启发,并且是这样的:

employee_csv_importer.rb(使用模块)

class EmployeeCsvImporter
  include CsvVerify

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

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 个答案:

答案 0 :(得分:1)

我建议您首先在没有moduleinclude的情况下开始编写您的功能。这有助于塑造结构,特别是如果您不熟悉Ruby。

通过包含CsvVerify添加的方法作为实例方法添加,而不是类方法。因此,您有NoMethodError