2016-03-13 5 views
0

Я пытаюсь создать набор методов, доступных, просто запустив Name.method, где имя одинаково для всех методов. Мне также нужны методы для доступа к переменным, из которых они были вызваны.Как создать модуль, который также имеет доступ к локальным переменным?

Вот что я в настоящее время:

module Name 
    def self.method1 
     p "method1 called" 
    end 
    def self.accessLocalVariables 
     p localVariable 
    end 
end 
Name.method1 #=> method1 called 
localVariable = "test" 
Name.accessLocalVariables #=> NameError: undefined local variable or method `localvariable' for Name:Module 

Я хотел бы, чтобы Name.accessLocalVariables вернулись test. Как я могу создать что-то, что будет работать таким образом?

Причина, по которой он должен обращаться к локальным переменным, и я не могу использовать другой тип переменной, потому что эта переменная является частью драгоценного камня, и мне нужно будет войти в драгоценный камень и найти каждый экземпляр и изменить его. Это было бы невозможно.

+0

Почему вы хотите сделать это? Это очень анти-инкапсуляция, плотная связь и склонность к ошибкам. – Aetherus

+0

@Aetherus Я пытаюсь объединить эти методы вместе, поэтому я использую модуль. Должен ли я использовать модуль? – thesecretmaster

+1

Короче говоря, метод не может получить доступ к локальной переменной, определенной в другом месте. Это не только в Ruby, но и во всех серьезных языках программирования. – Aetherus

ответ

2

Метод не может получить доступ к каким-либо локальным переменным, определенным в другом месте, поэтому это невозможно сделать. Вы должны передать значения локальных переменных параметрам метода.

+1

Вот почему они все-таки называются «локальными» переменными. Если бы они были доступны из другого места, они не были бы «местными». –

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