Попробуйте это:
class Bar
def initialize(foo)
puts "init"
@f = foo
end
def self.configure(foo, &block)
new(foo).instance_eval &block
end
def method2
puts "from Bar"
end
end
class Foo
def method1
puts "from Foo"
end
def start
Bar.configure(self) do
@f.method1
method2
end
end
end
Это делает переменную экземпляра уровня класса @fa Bar, которая устанавливается при инициализации объекта Bar с помощью new (foo) в Bar.configure.Передаваемый блок предполагает существование @f, который содержит ссылку на объект класса Foo.
Это сложный способ сделать это, хотя я не могу придумать ничего лучшего.Было бы интересно узнать вариант использования.