Palavras-chave: ruby, bloco, objeto, contexto

Um meio de executar um bloco dentro do contexto de um determinado objeto é adicionar um método direto no módulo Kernel do Ruby. Ele aceitará ser chamado diretamente como método do objeto ou passando o objeto como parâmetro:

module Kernel
	def with(obj=nil,&block)
		(obj || self).instance_eval &block
	end
end

(0..5).with { puts "#{min}/#{max}" }

with("TaQ") do
	puts "Oi, #{self}!"
	puts "Seu gêmeo malvado se chama #{self.reverse}."
end

[1,2,3,4,5].with do
	puts "Número aleatório de #{min} a #{max}: #{self[rand(size)]}"
end

A dica foi inspirada em outras pairagens, mas é boa e merecia uma referência (copião na cara dura). ;-)