Эквивалентно динамическому оператору импорта Python в Ruby? - PullRequest
2 голосов
/ 09 декабря 2011

В python для динамической загрузки модуля вы можете просто использовать оператор _____ import _____ и назначить модуль переменной, т. Е. (Из документов):

spam = __import__('spam', globals(), locals(), [], -1)

IЯ использовал это несколько раз в Python для имитации динамической загрузки / выгрузки модуля, потому что для «выгрузки» модуля вы можете просто удалить все ссылки на него, т.е.:

spam = None

Есть ли эквивалентэто в рубине?Я посмотрел на несколько других вопросов ( это , это и это ), но я хотел знать способ ограничения загруженного модуля переменной,если возможно.

Ответы [ 3 ]

3 голосов
/ 10 декабря 2011

Делает ли это то, что вы хотите?

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 
1 голос
/ 10 декабря 2011

AFAIK, Ruby на самом деле не имеет понятия об одном объекте экспорта, который файл require d может назначить переменной;поэтому я не понимаю, как бы вы это сделали.

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

0 голосов
/ 09 декабря 2011

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

...