From: "Christoffer Lernö" Date: 2007-03-15T04:38:53+09:00 Subject: Re: Anyone playing with higher order messaging in ruby? On Mar 14, 2007, at 20:04 , Christoffer Lern� wrote: > In a more generalized case, you want to use a block to act as a class. > > module Trampolines > class Trampoline > def initialize(block) > @block = block > end > def method_missing(symbol, *args, &block) > args << block if block > @block.call(symbol, *args) > end > end > end > > def trampoline(&block) > raise "Missing block" unless block > Trampolines::Trampoline.new(block) > end This code adds methods to all enumerables. module Enumerable %w(each collect select reject).each do |method| class_eval "def #{method}_do; trampoline { |m, b, *a| #{method} { |o| o.__send__(m, *a, &b) } }; end" end end For example ["a", "b", "c"].reject_do[/a/] # => ["b", "c"] ["a", "b", "c"].collect_do.capitalize #=> ["A", "B", "C"]