我在看Ransack紅寶石的內容。基本上它叫做require_constants
。這方法本身需要一個文件:在ransack.rb adapters.rb的需要一個方法內的文件
# ransack.rb
require 'ransack/adapters'
Ransack::Adapters.object_mapper.require_constants
# adapters.rb
module Ransack
module Adapters
def self.object_mapper
@object_mapper ||= instantiate_object_mapper
end
def self.instantiate_object_mapper
if defined?(::ActiveRecord::Base)
ActiveRecordAdapter.new
elsif defined?(::Mongoid)
MongoidAdapter.new
end
end
class ActiveRecordAdapter
def require_constants
require 'ransack/adapters/active_record/ransack/constants'
end
...
# constants.rb
module Ransack
module Constants
第一require
副本的內容,我相信。因此,我們可以參考Ransack::Adapters
而沒有未定義的錯誤。
但是,當我們調用require_constants
時,它似乎將Ransack::Constants
的內容複製到方法定義require_constants
中。
我發現那種混亂。我們正在複製一個方法內的模塊。我們在方法中複製模塊有什麼好處,而不是像其他require
那樣做?第二,我知道該模塊是不是一個局部變量,但在控制檯中我甚至不能定義一個模塊時,我試了一下:
class A
def a
module B end
end
end
SyntaxError: (irb):14: module definition in method body
那麼,什麼是require
這樣做不會導致語法錯誤?