From: Brian Candler Date: 2009-06-03T23:57:48+09:00 Subject: Re: block as string # Slightly enhanced version module Kernel alias :orig_lambda :lambda def lambda(src=nil,*rest,&blk) if src.nil? orig_lambda(&blk) else res = eval "lambda { #{src} }", *rest class << res; self; end.class_eval { define_method(:source) { src } } res end end end a = lambda { |x| puts x+x } b = lambda %{ |x| puts x+x+x } a["a"] b["b"] puts b.source # %{...} performs substitutions as per double-quoted string prefix = "hello" c = lambda %{ |x| puts "#{prefix} " + x } puts c.source c["world"] # %q{...} is like single-quoted string d = lambda %q{ |x| puts "#{prefix} " + x }, binding puts d.source d["world"] prefix = "goodbye" d["world"] -- Posted via http://www.ruby-forum.com/.