У меня есть вопрос о лучших методах работы с переменной областью Ruby, используя class_eval
.
В этом коде в блоке class_eval
локальные переменные first и second не определены.
def parent_method(opts={})
first = opts[:percent]
second = (10 * first).to_i
SecondClass.class_eval do
def second_method; return {:a => first, :b => second}; end;
end
end
Похоже, это проблема с областью видимости, потому что я нашел единственный способ заставить это работать - сделать переменные первого и второго уровня класса:
def parent_method(opts={})
@@first = opts[:percent]
@@second = (10 * @@first).to_i
SecondClass.class_eval do
def second_method; return {:a => @@first, :b => @@second}; end;
end
end
- Какова лучшая практика для этого сценария? Я понимаю, что глобальные переменные - плохой выбор для этого сценария, потому что из-за широкого диапазона результатов переменные уровня класса аналогично осуждаются?
- Помимо работы с областью действия переменных, существуют ли другие способы решения проблемы доступности этих переменных из
class_eval
?