Я знаком с модулями, предоставляющими доступ класса к методам экземпляра, включенным в модуль, но я не видел модулей, предоставляющих классы доступ к локальным переменным.Необычное использование пространства имен модулей
Вот файл A
:
module SequelPlayground
class Article
attr_reader :title, :body, :author_id, :id
def initialize(attributes)
@title = attributes[:title]
@body = attributes[:body]
@author_id = attributes[:author_id]
@id = attributes[:id]
end
def self.next_id
table.count + 1
end
def self.table
DB.from(:articles) #SELECT * FROM articles
end
end
end
Вот файл B
:
module SequelPlayground
DB = Sequel.postgres("sequel-playground")
class Server < Sinatra::Base
get '/' do
erb :index
end
end
end
Почему файл A
имеют доступ к локальной переменной DB
? Являются ли что-либо внутри модуля в том же пространстве имен даже между файлами?
«DB» - это константа на уровне модуля, а не локальная переменная (по правилу верхнего регистра). –
Ruby решит это, я считаю, в локальной области, затем поиск вверх по классам, модулям, вплоть до глобальной области. –
Интересно ... Я никогда этого не знал. Итак, в файле A он ищет БД локально, затем модуль, а затем глобально? – Jwan622