Ответ 1
foo.instance_eval &proc
instance_eval
может принимать блок вместо строки, а оператор &
превращает proc в блок для использования с вызовом метода.
Можно ли выполнить 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
foo.instance_eval &proc
instance_eval
может принимать блок вместо строки, а оператор &
превращает proc в блок для использования с вызовом метода.
Это для 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