2015-10-18 6 views
0

Я хотел бы быть в состоянии сделать это в Ruby:Ruby: Копирование объекта любого типа от одного модуля к другому

module A 
    @var = Object.new # could be any object 
    def f 
    puts @var.inspect 
    end 
    module_function :f 
end 

module B 
    def make_it(val) 
    # creates reference to val in this module under the same name as 
    # it appears in module A 
    end 
    module_function :make_it 
end 

Так что это сделает модуль B отвечает как делает модуль A:

B.make_it(# a reference to @var in module A) 
B.make_it(# a reference to f in module A) 

Это позволит Bf действовать как Af и Bf бы вернуть «инспектировать» из @var в модуле A или «инспектировать» из @var в B, где он является копией , что в А.

Я попросил, чтобы ссылки были сделаны в B, но также могли жить с копиями.

Кто-нибудь знает, можно ли это сделать? Для примера было бы замечательно, но любая помощь была бы высоко оценена. У меня довольно много ошибок, но я не знаю, как фразовать поиск.

ответ

0

Я не уверен, почему вы хотите это сделать. Но, глядя на него со стороны, я не уверен, что это хорошая идея. As they say here Модули - это функции. Но они также похожи на библиотеки, поэтому в идеале вы хотели бы, чтобы они были относительно независимы друг от друга и фактически не достигали друг друга. Это также улучшит работу в долгосрочной перспективе за счет снижения взаимозависимости и возможности нарушения кода.

Возможно, если бы вы могли объединить два модуля? Или просто предоставить дубликат кода в каждом?

+0

Назначение модулей mulitple состоит в том, чтобы иметь один для использования программой, а другой для данных из пользовательской среды, которая получает eval'd. Я хочу, чтобы определенные методы были доступны для пользовательской среды (пространство имен), и я хочу, чтобы она выполнялась динамически. Эти методы всегда доступны для не-eval'd стороны приложения. –

Смежные вопросы