Ich skizziere, wie würde CsvVerify-Modul arbeiten. Gibt es eine Möglichkeit nicht Klasse verschmutzen, die das Modul mit InstanzvariablenWie vermeidet man die Verwendung von Instanzvariablen in Modulen?
Idee von virtus inspiriert umfassen wird und geht in etwa so:
employee_csv_importer.rb (mit dem Modul)
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
Also wie reorganisiere ich dies, um die Verschmutzung von EmployeeCsvImporter mit @config zu vermeiden?
PS. Und warum funktioniert das nicht jetzt?
Warum bekomme ich diese Ausgabe von running employee_csv_importer.rb?
included
/data/gems/csv_verify/examples/1_employees.rb:6:in `<class:EmployeeCsvImporter>':
undefined method `headers' for EmployeeCsvImporter:Class (NoMethodError)
def self.headers funktioniert auch nicht. Also empfehlen Sie, dass ich CsvVerify stattdessen eine Klasse mache und EmployeeCsvImporter erben lasse? Auch bin ich nicht neu in Ruby, sondern schreibe Module. Nie ein ähnliches Konzept in anderen Sprachen gefunden und muss es eines Tages meistern. –
müssen Sie Ihre Klasse mit dem Modul, das die '' 'header''' Methode bereitstellt, erweitern. Ich schlage vor, Sie zuerst schreiben die volle Funktionalität Ihrer Klasse und dann entscheiden, wie und wenn Sie wollen/müssen in Module aufgeteilt werden. . –
ok extend funktioniert, danke, aber das bedeutet @config wird eine Klassenvariable sein? –