require
выполняет код.Это будет включать любой код вне любых классов и модулей в требуемом файле плюс любой исполняемый код в классах и модулях, который находится вне объявлений методов.Как сказал neutrino , интерпретатор ruby выполняет код в файле, который требуется для определения классов в источнике.Однако это может быть немного понятнее, если вы попробуете это с чем-то, что имеет очевидный побочный эффект, например оператор puts
.
Попробуйте это в качестве простого примера.Создайте файл hello.rb
, содержащий puts "Hello World"
, затем перейдите в irb:
irb(main):001:0> require 'hello'
Hello World
=> true
Затем попробуйте этот пример простого класса с некоторым исполняемым кодом в его теле.Создайте файл hello2.rb
, содержащий:
class Hello
puts "class Hello being defined"
end
, затем потребуйте от irb:
irb(main):001:0> require 'hello2'
class Hello being defined
=> true
Возвращаясь к bin/rails
, взгляните на источник для рельсов/ cli в Github, чтобы следовать цепочке его работы.