Подтвердить что ты не робот

Связывание Procs

Можно ли выполнить proc в контексте другого объекта?

Я знаю, что обычно вы делаете proc.call(foo), а затем блок должен определять параметр. Мне было интересно, могу ли я получить "я" для привязки к foo, так что нет необходимости иметь параметр блока.

proc = Proc.new { self.hello }

class Foo
  def hello
    puts "Hello!"
  end
end

foo = Foo.new

# How can proc be executed within the context of foo
# such that it outputs the string "Hello"?

proc.call
4b9b3361

Ответ 1

foo.instance_eval &proc

instance_eval может принимать блок вместо строки, а оператор & превращает proc в блок для использования с вызовом метода.

Ответ 2

Это для ruby ​​1.9:

class MyCat
  def initialize(start, &block)
    @elsewhere = start
    define_singleton_method(:run_elsewhere, block) if block_given?
  end
end
MyCat.new('Hello'){ @elsewehere << ' world' }.run_elsewhere