Я бы назвал модули Person::CSVExport
и Animal::CSVExport
. Вы можете require
их (из каждого отдельного файла) следующим образом:
require File.join(File.dirname(__FILE__), 'animal', 'csv_export.rb')
require File.join(File.dirname(__FILE__), 'person', 'csv_export.rb')
Это не работает изнутри irb
(по крайней мере в Ruby 1.9.2p290, который я запускаю), но оно работает, если программа Ruby запускается из файла.
Вы сделали хорошую мысль; если вы загрузите (например) animal/csv_export.rb
вверху animal.rb
, в этот момент Animal
является неопределенной константой. Вы можете обойти это так:
class Animal
module CSVExport
# contents
end
end
Обратите внимание, что, если вы можете, лучшим подходом может быть создание некоторых низкоуровневых служебных методов для себя, которые позволят кодировать логику экспорта CSV на более высоком уровне абстракции и сделать этот код достаточно коротким, чтобы войдите в animal.rb
и person.rb
, не подавляя их. Я не знаю, какими именно были бы эти утилиты; Мне нужно увидеть код, чтобы предложить конкретные предложения.