Включение класса Ruby из отдельного файла - PullRequest
38 голосов
/ 26 июня 2009

Некоторое время я включал целый класс в модуль Ruby. Видимо, это не то, что я должен делать. Похоже, что целью модуля является сохранение функций, которые затем могут быть включены как методы в новый класс.

Я не хочу этого. У меня есть класс, который я хочу сохранить в отдельном файле, к которому я могу получить доступ из других файлов. Как я могу это сделать?

Спасибо.

Ответы [ 3 ]

60 голосов
/ 26 июня 2009

Модули служат двойному назначению как держатель функций и как пространство имен. Хранение классов в модулях вполне приемлемо. Чтобы поместить класс в отдельный файл, просто определите класс как обычно, а затем в файле, в котором вы хотите использовать класс, просто поместите require 'name_of_file_with_class' вверху. Например, если бы я определил класс Foo в foo.rb, в bar.rb у меня была бы строка require 'foo'.

Если вы используете Rails, это включение часто происходит автоматически

Редактировать: уточнение формата файла

#file: foo.rb
class Foo
  def initialize
    puts "foo"
  end
end

...

#file: bar.rb
require 'foo'

Foo.new

Если вы находитесь в Rails, поместите эти классы в lib/ и используйте соглашение об именах для файлов строчной версии имени класса с подчеркиванием, например, Foo -> foo.rb, FooBar -> foo_bar.rb и т. Д.

Начиная с ruby ​​версии 1.9, вы можете использовать require_relative, чтобы запрашивать файлы относительно файла, который вы редактируете.

0 голосов
/ 30 июня 2019

При использовании Require, внутри строки указывается полный путь к классу, на который вы ссылаетесь, если только он не находится в корневой папке Ruby

0 голосов
/ 24 апреля 2018

Вы также можете использовать нагрузку. Также вы используете требует относительный, если файл находится в том же каталоге. Прочитайте эту ссылку для дальнейшего понимания: http://rubylearning.com/satishtalim/including_other_files_in_ruby.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...