Эквивалентно динамическому оператору импорта 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 на самом деле не имеет понятия об одном объекте экспорта, который required файл может быть назначен переменной; таким образом, я не понимаю, как бы вы это сделали.

Обратите внимание, однако, что вы все еще можете использовать такие вещи, как remove_const отменить определение классов, которые уже были загружены.

Нет, не возможно если ты require или же load файл в Ruby, вы импортируете файл в глобальное пространство имен.

Другие вопросы по тегам