Когда использовать `require`, `load` или `autoload` в Ruby?

StackOverflow https://stackoverflow.com/questions/804297

  •  03-07-2019
  •  | 
  •  

Вопрос

Я понимаю тонкие различия между require, load и autoload в Ruby, но мой вопрос: как узнать, какой из них использовать?

Помимо возможности «обернуть» load в анонимном модуле, require кажется, предпочтительнее.

Но потом autoload позволяет вам отложенно загружать файлы - это звучит фантастически, но я не уверен, что на практике вы это получите require

Является ли один метод предпочтительнее другого?Есть ли ситуация, когда один метод выделяется?

Это было полезно?

Решение

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

Если вы хотите создать свой собственный автоматический перезагрузщик, который загружает ваш код каждый раз, когда он изменяется или каждый раз, когда кто-то обращается к URL-адресу (в целях разработки, чтобы вам не приходилось каждый раз перезагружать сервер), то используя load ибо это разумно.

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

mylibrary.rb

puts "I was loaded!"

class MyLibrary
end

Попробуйте в ИРБ

irb(main):001:0> require 'mylibrary'
I was loaded!
=> true

irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>

Увидеть разницу.

вот что вы получаете с autoload над require:

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

Еще одним преимуществом является то, что вам может не потребоваться загружать некоторые части кода, если пользователь не использует определенные функции, что сокращает время загрузки и уменьшает объем памяти.

Помимо того, что вам уже сказали другие, будущее autoload является неопределенным.Было запланировано его прекращение поддержки в Ruby 2.0, но прекращение поддержки не произошло к моменту замораживания функций версии 2.0.Теперь ожидается, что autoload будет устаревшим в Ruby 2.1, но это уже даже не точно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top