Привязка проков - PullRequest
       15

Привязка проков

30 голосов
/ 08 февраля 2009

Возможно ли выполнить процедуру в контексте другого объекта?

Я знаю, что обычно вы делаете 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

Ответы [ 2 ]

45 голосов
/ 08 февраля 2009
foo.instance_eval &proc

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

0 голосов
/ 02 декабря 2012

Это для рубина 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...