2015-07-08 2 views
-1

Как использовать переменные и метод экземпляра в блоке в ruby?Выполнить класс метода в блоке

class Foo 
    @var = "my var" 
    def meth() 
    "my method" 
    end 

    Module.something do |variable| 
    p @var #=> Undefined 
    p meth() #=> Undefined 
    end 
end 
+0

Вы можете использовать 'instance_eval', но вам нужен экземпляр для вызова его. –

+0

Это сбивает с толку и приведет вас в беду. Я бы явно передал var (или self) и доступ к нему через его методы. Module.something плохо написано, если есть ожидание того, что вы сможете сделать что-то из внешнего закрытия. – Mircea

+0

Предположим, что модуль является внешней библиотекой. Я не могу изменить Module.something, но мне нужны данные из моего экземпляра. –

ответ

0

Я не уверен, что я полностью понять контекст, но это может помочь:

class Foo 
    def initialize 
    @var = "my var" 
    end 
    def meth() 
    "my method" 
    end 
    def fee 
    AModule.something do |variable| 
     p @var 
     p meth() 
     p variable 
    end 
    end 
end 

# test: 

module AModule 
    def self.something 
    yield "bar" 
    end 
end 

foo = Foo.new 
foo.fee 
Смежные вопросы