Для драгоценного камня Я работаю над тем, что мне нужно добавить переменную в main, желательно локальную переменную, но экземпляр также работает. Я пытаюсь использовать Object.instance_variable_set
, но не добился такого прогресса. Как я могу это сделать?Добавить переменную в основную
Разъяснение
Мне нужно установить переменную экземпляра из модуля в main
.
Вот моя ситуация:
module MyGem::Submodule
def self.add_variable_to_main
Object.instance_variable_set(:@var,"value")
end
def self.recieve_variable_from_main
Object.instance_variable_get(:@var)
end
def self.store_block
@@block=&block
end
def self.call_block
add_variable_to_main
@@block.call
puts recieve_variable_from_main
end
end
class Object
include MyGem::Submodule
end
store_block do
@var = "Var is #{@var}"
end
call_block
Я также спросил this question о той же проблеме, она имеет дополнительные детали.
'main' - это контекст' TOPLEVEL_BINDING', вы действительно уверены, что именно здесь вы хотите добавить это? Объясните пример использования, который не будет так же легко обрабатываться глобальным объектом или константой верхнего уровня. Драгоценный камень должен быть инкапсулированной библиотекой, а мутация верхнего уровня может иметь непреднамеренные результаты. – engineersmnky
@engineersmnky В моем драгоценном камне мне нужно установить переменную, доступную в основном, но делать это, хотя объект будет работать так же хорошо. Не могли бы вы написать ответ, объясняющий недостатки и хорошие альтернативы? – thesecretmaster
Можете ли вы привести пример того, чего вы надеетесь достичь? Я думаю, вы неправильно поняли концепцию 'main' – engineersmnky