Контекст требуемых файлов в одном геме Ruby

Так что, наверное, это действительно просто, но я сам не могу найти подходящие слова для этого в Google. Я только начал изучать Ruby на SoloLearn, и одним из их примеров была очень простая ролевая игра (на самом деле всего лишь один бой), и она казалась идеальным учебным проектом. У меня есть жемчужина со следующей структурой:

Game/
     game.gemspec
     lib/
         game.rb
         chars.rb

game.rb имеет класс Player, который должен быть суперклассом каждого символьного класса (типы символов для двусмысленности) в chars.rb. Могут ли классы в chars.rb наследоваться от классов в game.rb?

Пожалуйста, подумайте о том, чтобы переформатировать свой вопрос, используя это руководство по стилю.

anothermh 14.12.2018 21:51

Да, они могут наследовать, все файлы в lib будут доступны либо через автозагрузку, либо с помощью require или require_relative. Вы также можете добавить свой проигрыватель в его собственный файл lib/player.rb, как вы это обычно и увидите. Если у вас есть подкласс типа «Rogue», вы могли бы даже подумать о том, чтобы поместить его в lib/player/rogue.rb, если хотите, чтобы ваш код был разделен.

Jay Dorsey 15.12.2018 00:20

@anothermh, извините, самая уценка, которую я знаю, - это br, и заголовки настолько плохи, что нужно это проверить! . @. Джей, спасибо ... не могли бы вы немного расширить это и опубликовать в качестве ответа, пожалуйста

Myersj281 15.12.2018 01:26

@ Myersj281 конечно. Позвольте мне собрать образец

Jay Dorsey 16.12.2018 04:10
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
4
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ruby использует require для импорта других файлов.

Некоторые концепции, чтобы лучше понять это,

  • require импортирует другой файл Ruby.
  • Когда Ruby импортирует файл, в котором находится код, этот файл выполняется построчно.
  • Когда выполняется определение класса, класс добавляется в глобальное пространство имен.
  • Таким образом, после импорта файла, определяющего ваш класс, любой файл может получить доступ к вашему классу, даже если он не импортирует этот файл напрямую. Однако, чтобы избежать неприятных сюрпризов, лучше либо повторять операторы require всякий раз, когда вы используете класс, либо полагаться на автозагрузку, как, например, в Rails. Ruby отслеживает все импортированные файлы, поэтому даже если вы импортируете их более одного раза, он не выполнит их более одного раза.

Интересный факт, вы можете распечатать имена всех импортированных файлов, используя

puts $"
Ответ принят как подходящий

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

Я загрузил очень, очень простой пример, чтобы вы могли увидеть, как работает импорт:

https://github.com/jaydorsey/game

Я попытался проиллюстрировать, как вы можете использовать папки и require_relative, чтобы попытаться организовать свой код.

В документации по Ruby есть более подробные сведения об обоих методах:

http://ruby-doc.org/core-2.5.3/Kernel.html#method-i-require

Другие вопросы по теме