Ruby-код не компилируется, он обрабатывается [в основном] так, как он поступает в парсер.Тем не менее, следующие два фрагмента кода не эквивалентны:
class Foo; def foo; :first; end; end
class Foo; def foo; :second; end; end
Foo.new.foo #⇒ :second
против
class Foo; def foo; :second; end; end
class Foo; def foo; :first; end; end
Foo.new.foo #⇒ :first
Кроме того, Kernel#require
является обычной функцией, определенной дляKernel
модуль.Я мог бы подумать, что файл 'canonicalizer/hub_page_canonical'
зависит от модуля Canonicalizer
(например, он содержит определение класса include Canonicalizer
.) Чтобы это было возможно, включенный модуль должен быть объявлен заранее, поэтому require
следует после егоопределение.