2012-05-16 3 views
0

Есть ли способ доступа к внешнему методу изнутри класса? Например:Доступ к внешнему методу изнутри класса

Использование файла .haml (следовательно, внутри class Haml::Engine) содержит class Tumblr, с использованием метода self.render. Вне класса Tumblr, #haml_concat функционирует отлично, но возвращает NameError внутри Tumblr. #haml_concat определяется в Haml::Helpers. Почему #haml_concat непригодным для использования внутри Tumblr?

value = 42 

class TestClass 
    def test_method 
    value 
    end 
end 

TestClass.new.value 
# should ideally return 42 

Сейчас это просто возвращает NameError: undefined local variable or method 'value' for #<TestClass:0x00000000e24960>.

+1

Это не «внешний метод». Значение является локальной переменной, поэтому доступно только из ее области –

ответ

2

Если вы не указали приемник метода, рубин будет выглядеть в классе текущего объекта и до всех его предков.

Итак, поскольку Haml::Engine нет в списке Tumblr предков, рубин не может найти этот метод. Решение заключается в том, чтобы указать объект, по которому вы вызываете метод явно.

И вы действительно определяете класс внутри файла haml Tumblr? Это выглядит очень плохо.

+0

Извинения, я думаю, что я слишком упростил проблему. Я пытаюсь получить доступ к внешнему методу, который определен в модуле, а также разрешает класс; Я отредактирую вопрос. – Fraser

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