Эквивалентно динамическому оператору импорта Python в Ruby?
В python для динамической загрузки модуля вы можете просто использовать оператор _____import_____ и назначить модуль переменной, т. Е. (Из документации):
spam = __import__('spam', globals(), locals(), [], -1)
Я использовал это несколько раз в python для имитации динамической загрузки / выгрузки модуля, потому что для "выгрузки" модуля вы можете просто удалить все ссылки на него, т.е.
spam = None
Есть ли эквивалент в Ruby? Я посмотрел на несколько других вопросов ( это, это и это), но я хотел знать способ ограничения загруженного модуля переменной, если это возможно.
3 ответа
Делает ли это то, что вы хотите?
require 'bigdecimal/math' # a module from stdlib
bm = BigMath # a module is just an object
BigMath = nil # yields a warning, but BigMath is gone.
puts bm.log(10, 40).to_s # it's alter ego lives.
#=> 0.230258509299404568401799145468436420760110148862877297632502494462371208E1
AFAIK, Ruby на самом деле не имеет понятия об одном объекте экспорта, который require
d файл может быть назначен переменной; таким образом, я не понимаю, как бы вы это сделали.
Обратите внимание, однако, что вы все еще можете использовать такие вещи, как remove_const
отменить определение классов, которые уже были загружены.
Нет, не возможно если ты require
или же load
файл в Ruby, вы импортируете файл в глобальное пространство имен.