У меня есть условный бит кода, который может быть загружен только при определенных условиях. Это код, специфичный для платформы.Delayed require - Неинициализированная постоянная ошибка
module MyGem
module MyPlatformSpecificThing
#stuff
end
end
Моя текущая попытка лениво требует это выполняется, как:
module MyGem
class AClass
def DoSomething
if thing_is_true
require 'my_platform_specific_thing.rb'
MyGem::MyPlatformSpecificThing.init
#more stuff
end
#even more stuff
end
end
Это казалось достаточно твердый план, к сожалению, не работает. Этот код приводит к ошибке:
uninitialized constant MyGem::MyPlatformSpecificThing (NameError)
Трассировка стека указывает источник ошибки является вызов инициализации в методе DoSomething.
Я не совсем уверен, почему Ruby дает мне возможность поместиться здесь. Что я делаю неправильно, и как я должен это делать?
редактировать:
Для конкретики, я имею в виду класс платформы, расположенной here. Вышеупомянутое должно помочь сузить детали того, что я имею в виду, но в случае, если кто-то захочет/должен увидеть конкретные классы/модули, с которыми я работаю.
Того, кто голосовал, чтобы закрыть этот вопрос как «неясный, как то, что задают»; Я вполне уверен, что я изложил это в вопросе, но если есть конкретный аспект этого, я могу подробно остановиться на просьбе сообщить мне об этом. –
Вы можете уточнить, что проверяет 'thing_is_true'? он должен быть в экземпляре 'AClass'? Если вы можете переместить его из экземпляра, то я бы рекомендовал делать это на уровне класса, а не на уровне экземпляра. –
Несомненно. Фактическая проверка проверяет переменную класса, чтобы увидеть, является ли она нулевой. Я не уверен, что я слежу за последней частью переноса требования на уровень класса, не могли бы вы подробнее рассказать об этом? –